home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2000 #1 / Amiga Plus CD - 2000 - No. 1.iso / Tools / Dev / mamesrc / src / amiga / c2p.s < prev    next >
Encoding:
Text File  |  1999-12-03  |  49.3 KB  |  3,509 lines

  1. ;
  2. ; Date: 24-Sep-1997            Mikael Kalms (Scout/C-Lous & more)
  3. ;
  4. ; 1x1 8bpl cpu5 C2P for arbitrary BitMaps
  5. ;
  6. ; Features:
  7. ; Performs CPU-only C2P conversion using rather state-of-the-art (as of
  8. ; the creation date, anyway) techniques
  9. ; Different routines for non-modulo and modulo C2P conversions
  10. ; Handles bitmaps of virtually any size (>4096x4096)
  11. ;
  12. ; Restrictions:
  13. ; Chunky-buffer must be an even multiple of 32 pixels wide
  14. ; X-Offset must be set to an even multiple of 8
  15. ; If these conditions not are met, the routine will abort.
  16. ; If incorrect/invalid parameters are specified, the routine will
  17. ; most probably crash.
  18. ;
  19. ; c2p1x1_8_c5_bm
  20. ;
  21. ; Changes by Mats Eirik Hansen (mats.hansen@triumph.no)
  22. ;
  23. ; - Supports modulo on the chunky source buffer. This was needed by
  24. ;   MAME 0.31 and higher.
  25. ; - Supports depths from 1 to 8. For depths from 1 to 4 I've removed
  26. ;   the whole second stage, but otherwise I've only removed the
  27. ;   write for each unneeded bitplane.
  28. ;
  29.  
  30.  
  31.     XDEF    _c2p
  32.  
  33.     incdir    include:
  34.     include    graphics/gfx.i
  35.  
  36.     section    code,code
  37.  
  38. ; d0.w    chunkyx [chunky-pixels]
  39. ; d1.w    chunkyy [chunky-pixels]
  40. ; d2.w    offsx [screen-pixels]
  41. ; d3.w    offsy [screen-pixels]
  42. ; d4.l  chunky bytes per row
  43. ; a0    chunkyscreen
  44. ; a1    BitMap
  45.  
  46. _c2p:
  47. c2p:
  48.     movem.l    d2-d7/a2-a6,-(sp)
  49.  
  50.     move.w    d1,c2p_chunkyy
  51.     beq    .exit
  52.  
  53.     move.l    d4,c2p_srcbpr
  54.     sub.l    d0,d4
  55.     move.l    d4,c2p_srcmod
  56.                     ; A few sanity checks
  57.     move.w    d0,d4
  58.     move.w    d2,d5
  59.     andi.w    #$1f,d4            ; Even 32-pixel width?
  60.     bne    .exit
  61.     andi.w    #$7,d5            ; Even 8-pixel xoffset?
  62.     bne    .exit
  63.     moveq    #0,d4
  64.     move.w    bm_BytesPerRow(a1),d4
  65.  
  66.     move.w    d0,c2p_chunkyx ; Skip if 0 pixels to convert
  67.     beq    .exit
  68.  
  69.     ext.l    d2            ; Offs to first pixel to draw in bpl
  70.     mulu.w    d4,d3
  71.     lsr.l    #3,d2
  72.     add.l    d2,d3
  73.  
  74.     lsl.l    #3,d4
  75.     sub.l    d0,d4
  76.     lsr.l    #3,d4
  77.     move.l    d4,c2p_rowmod ; Modulo between two rows
  78.  
  79.     move.l    a0,a2            ; Ptr to end of line + 1 iter
  80.     add.w    c2p_chunkyx(pc),a2
  81.  
  82.     cmpi.b    #8,bm_Depth(a1)
  83.     beq    .8start
  84.     cmpi.b    #7,bm_Depth(a1)
  85.     beq    .7start
  86.     cmpi.b    #6,bm_Depth(a1)
  87.     beq    .6start
  88.     cmpi.b    #5,bm_Depth(a1)
  89.     beq    .5start
  90.     cmpi.b    #4,bm_Depth(a1)
  91.     beq    .4start
  92.     cmpi.b    #3,bm_Depth(a1)
  93.     beq    .3start
  94.     cmpi.b    #2,bm_Depth(a1)
  95.     beq    .2start
  96.     cmpi.b    #1,bm_Depth(a1)
  97.     blo    .exit
  98.  
  99. .1start
  100.     movem.l    a0-a2/d1/d3,-(sp)
  101.  
  102.     movem.l    bm_Planes(a1),a3-a6    ; Setup ptrs to bpl0-3
  103.     add.l    d3,a3
  104.  
  105.     move.l    (a0)+,d0        ; Convert lower 4 bpls
  106.     move.l    (a0)+,d2
  107.     move.l    (a0)+,d1
  108.     move.l    (a0)+,d3
  109.  
  110.     move.l    #$0f0f0f0f,d6        ; Merge 4x1, part 1
  111.     and.l    d6,d0
  112.     and.l    d6,d1
  113.     and.l    d6,d2
  114.     and.l    d6,d3
  115.     lsl.l    #4,d0
  116.     lsl.l    #4,d1
  117.     or.l    d2,d0
  118.     or.l    d3,d1
  119.  
  120.     move.l    (a0)+,d2
  121.     move.l    (a0)+,d6
  122.     move.l    (a0)+,d3
  123.     move.l    (a0)+,d7
  124.  
  125.     move.l    #$0f0f0f0f,d4        ; Merge 4x1, part 2
  126.     and.l    d4,d2
  127.     and.l    d4,d6
  128.     and.l    d4,d3
  129.     and.l    d4,d7
  130.     lsl.l    #4,d2
  131.     lsl.l    #4,d3
  132.     or.l    d6,d2
  133.     or.l    d7,d3
  134.  
  135.     move.w    d2,d6            ; Swap 16x2
  136.     move.w    d3,d7
  137.     move.w    d0,d2
  138.     move.w    d1,d3
  139.     swap    d2
  140.     swap    d3
  141.     move.w    d2,d0
  142.     move.w    d3,d1
  143.     move.w    d6,d2
  144.     move.w    d7,d3
  145.  
  146.     move.l    #$33333333,d4
  147.     move.l    d2,d6            ; Swap 2x2
  148.     move.l    d3,d7
  149.     lsr.l    #2,d6
  150.     lsr.l    #2,d7
  151.     eor.l    d0,d6
  152.     eor.l    d1,d7
  153.     and.l    d4,d6
  154.     and.l    d4,d7
  155.     eor.l    d6,d0
  156.     eor.l    d7,d1
  157.     lsl.l    #2,d6
  158.     lsl.l    #2,d7
  159.     eor.l    d6,d2
  160.     eor.l    d7,d3
  161.  
  162.     move.l    #$00ff00ff,d4
  163.     move.l    d1,d6            ; Swap 8x1
  164.     move.l    d3,d7
  165.     lsr.l    #8,d6
  166.     lsr.l    #8,d7
  167.     eor.l    d0,d6
  168.     eor.l    d2,d7
  169.     bra    .1modx1start
  170. .1modx1y
  171.     add.l    c2p_srcbpr(pc),a2 ; Skip to end of next line
  172.     move.l    c2p_rowmod(pc),d0 ; Skip to beginning of next line
  173.     add.l    d0,a3
  174. .1modx1
  175.     move.l    (a0)+,d0
  176.     move.l    (a0)+,d2
  177.     move.l    (a0)+,d1
  178.     move.l    (a0)+,d3
  179.     move.l    d7,(a3)+
  180.  
  181.     move.l    #$0f0f0f0f,d6        ; Merge 4x1, part 1
  182.     and.l    d6,d0
  183.     and.l    d6,d1
  184.     and.l    d6,d2
  185.     and.l    d6,d3
  186.     lsl.l    #4,d0
  187.     lsl.l    #4,d1
  188.     or.l    d2,d0
  189.     or.l    d3,d1
  190.  
  191.     move.l    (a0)+,d2
  192.     move.l    (a0)+,d6
  193.     move.l    (a0)+,d3
  194.     move.l    (a0)+,d7
  195.  
  196.     move.l    #$0f0f0f0f,d4        ; Merge 4x1, part 2
  197.     and.l    d4,d2
  198.     and.l    d4,d6
  199.     and.l    d4,d3
  200.     and.l    d4,d7
  201.     lsl.l    #4,d2
  202.     lsl.l    #4,d3
  203.     or.l    d6,d2
  204.     or.l    d7,d3
  205.  
  206.     move.w    d2,d6            ; Swap 16x2
  207.     move.w    d3,d7
  208.     move.w    d0,d2
  209.     move.w    d1,d3
  210.     swap    d2
  211.     swap    d3
  212.     move.w    d2,d0
  213.     move.w    d3,d1
  214.     move.w    d6,d2
  215.     move.w    d7,d3
  216.  
  217.     move.l    #$33333333,d4
  218.     move.l    d2,d6            ; Swap 2x2
  219.     move.l    d3,d7
  220.     lsr.l    #2,d6
  221.     lsr.l    #2,d7
  222.     eor.l    d0,d6
  223.     eor.l    d1,d7
  224.     and.l    d4,d6
  225.     and.l    d4,d7
  226.     eor.l    d6,d0
  227.     eor.l    d7,d1
  228.     lsl.l    #2,d6
  229.     lsl.l    #2,d7
  230.     eor.l    d6,d2
  231.     eor.l    d7,d3
  232.  
  233.     move.l    #$00ff00ff,d4
  234.     move.l    d1,d6            ; Swap 8x1
  235.     move.l    d3,d7
  236.     lsr.l    #8,d6
  237.     lsr.l    #8,d7
  238.     eor.l    d0,d6
  239.     eor.l    d2,d7
  240. .1modx1start
  241.     and.l    d4,d6
  242.     and.l    d4,d7
  243.     eor.l    d6,d0
  244.     eor.l    d7,d2
  245.     lsl.l    #8,d6
  246.     lsl.l    #8,d7
  247.     eor.l    d6,d1
  248.     eor.l    d7,d3
  249.  
  250.     move.l    #$55555555,d4
  251.     move.l    d1,d5            ; Swap 1x1
  252.     move.l    d3,d7
  253.     lsr.l    #1,d5
  254.     lsr.l    #1,d7
  255.     eor.l    d0,d5
  256.     eor.l    d2,d7
  257.     and.l    d4,d5
  258.     and.l    d4,d7
  259.     eor.l    d5,d0
  260.     eor.l    d7,d2
  261.     add.l    d5,d5
  262.     add.l    d7,d7
  263.     eor.l    d1,d5
  264.     eor.l    d3,d7
  265.  
  266.     move.l    d0,a1
  267.     move.l    d2,d4
  268.  
  269.     cmpa.l    a0,a2
  270.     bne    .1modx1
  271.  
  272.     subq.w    #1,c2p_chunkyy
  273.     beq    .4exit
  274.  
  275.     add.l    c2p_srcmod(pc),a0
  276.  
  277.     move.l    (a0)+,d0
  278.     move.l    (a0)+,d2
  279.     move.l    (a0)+,d1
  280.     move.l    (a0)+,d3
  281.     move.l    d7,(a3)+
  282.  
  283.     move.l    #$0f0f0f0f,d6        ; Merge 4x1, part 1
  284.     and.l    d6,d0
  285.     and.l    d6,d1
  286.     and.l    d6,d2
  287.     and.l    d6,d3
  288.     lsl.l    #4,d0
  289.     lsl.l    #4,d1
  290.     or.l    d2,d0
  291.     or.l    d3,d1
  292.  
  293.     move.l    (a0)+,d2
  294.     move.l    (a0)+,d6
  295.     move.l    (a0)+,d3
  296.     move.l    (a0)+,d7
  297.  
  298.     move.l    #$0f0f0f0f,d4        ; Merge 4x1, part 2
  299.     and.l    d4,d2
  300.     and.l    d4,d6
  301.     and.l    d4,d3
  302.     and.l    d4,d7
  303.     lsl.l    #4,d2
  304.     lsl.l    #4,d3
  305.     or.l    d6,d2
  306.     or.l    d7,d3
  307.  
  308.     move.w    d2,d6            ; Swap 16x2
  309.     move.w    d3,d7
  310.     move.w    d0,d2
  311.     move.w    d1,d3
  312.     swap    d2
  313.     swap    d3
  314.     move.w    d2,d0
  315.     move.w    d3,d1
  316.     move.w    d6,d2
  317.     move.w    d7,d3
  318.  
  319.     move.l    #$33333333,d4
  320.     move.l    d2,d6            ; Swap 2x2
  321.     move.l    d3,d7
  322.     lsr.l    #2,d6
  323.     lsr.l    #2,d7
  324.     eor.l    d0,d6
  325.     eor.l    d1,d7
  326.     and.l    d4,d6
  327.     and.l    d4,d7
  328.     eor.l    d6,d0
  329.     eor.l    d7,d1
  330.     lsl.l    #2,d6
  331.     lsl.l    #2,d7
  332.     eor.l    d6,d2
  333.     eor.l    d7,d3
  334.  
  335.     move.l    #$00ff00ff,d4
  336.     move.l    d1,d6            ; Swap 8x1
  337.     move.l    d3,d7
  338.     lsr.l    #8,d6
  339.     lsr.l    #8,d7
  340.     eor.l    d0,d6
  341.     eor.l    d2,d7
  342.  
  343.     and.l    d4,d6
  344.     and.l    d4,d7
  345.     eor.l    d6,d0
  346.     eor.l    d7,d2
  347.     lsl.l    #8,d6
  348.     lsl.l    #8,d7
  349.     eor.l    d6,d1
  350.     eor.l    d7,d3
  351.  
  352.     move.l    #$55555555,d4
  353.     move.l    d1,d5            ; Swap 1x1
  354.     move.l    d3,d7
  355.     lsr.l    #1,d5
  356.     lsr.l    #1,d7
  357.     eor.l    d0,d5
  358.     eor.l    d2,d7
  359.     and.l    d4,d5
  360.     and.l    d4,d7
  361.     eor.l    d5,d0
  362.     eor.l    d7,d2
  363.     add.l    d5,d5
  364.     add.l    d7,d7
  365.     eor.l    d1,d5
  366.     eor.l    d3,d7
  367.  
  368.     move.l    d0,a1
  369.     move.l    d2,d4
  370.  
  371.     bra    .1modx1y
  372.  
  373. .2start
  374.     movem.l    a0-a2/d1/d3,-(sp)
  375.  
  376.     movem.l    bm_Planes(a1),a3-a6    ; Setup ptrs to bpl0-3
  377.     add.l    d3,a3
  378.     add.l    d3,a4
  379.  
  380.     move.l    (a0)+,d0        ; Convert lower 4 bpls
  381.     move.l    (a0)+,d2
  382.     move.l    (a0)+,d1
  383.     move.l    (a0)+,d3
  384.  
  385.     move.l    #$0f0f0f0f,d6        ; Merge 4x1, part 1
  386.     and.l    d6,d0
  387.     and.l    d6,d1
  388.     and.l    d6,d2
  389.     and.l    d6,d3
  390.     lsl.l    #4,d0
  391.     lsl.l    #4,d1
  392.     or.l    d2,d0
  393.     or.l    d3,d1
  394.  
  395.     move.l    (a0)+,d2
  396.     move.l    (a0)+,d6
  397.     move.l    (a0)+,d3
  398.     move.l    (a0)+,d7
  399.  
  400.     move.l    #$0f0f0f0f,d4        ; Merge 4x1, part 2
  401.     and.l    d4,d2
  402.     and.l    d4,d6
  403.     and.l    d4,d3
  404.     and.l    d4,d7
  405.     lsl.l    #4,d2
  406.     lsl.l    #4,d3
  407.     or.l    d6,d2
  408.     or.l    d7,d3
  409.  
  410.     move.w    d2,d6            ; Swap 16x2
  411.     move.w    d3,d7
  412.     move.w    d0,d2
  413.     move.w    d1,d3
  414.     swap    d2
  415.     swap    d3
  416.     move.w    d2,d0
  417.     move.w    d3,d1
  418.     move.w    d6,d2
  419.     move.w    d7,d3
  420.  
  421.     move.l    #$33333333,d4
  422.     move.l    d2,d6            ; Swap 2x2
  423.     move.l    d3,d7
  424.     lsr.l    #2,d6
  425.     lsr.l    #2,d7
  426.     eor.l    d0,d6
  427.     eor.l    d1,d7
  428.     and.l    d4,d6
  429.     and.l    d4,d7
  430.     eor.l    d6,d0
  431.     eor.l    d7,d1
  432.     lsl.l    #2,d6
  433.     lsl.l    #2,d7
  434.     eor.l    d6,d2
  435.     eor.l    d7,d3
  436.  
  437.     move.l    #$00ff00ff,d4
  438.     move.l    d1,d6            ; Swap 8x1
  439.     move.l    d3,d7
  440.     lsr.l    #8,d6
  441.     lsr.l    #8,d7
  442.     eor.l    d0,d6
  443.     eor.l    d2,d7
  444.     bra    .2modx1start
  445. .2modx1y
  446.     add.l    c2p_srcbpr(pc),a2 ; Skip to end of next line
  447.     move.l    c2p_rowmod(pc),d0 ; Skip to beginning of next line
  448.     add.l    d0,a3
  449.     add.l    d0,a4
  450. .2modx1
  451.     move.l    (a0)+,d0
  452.     move.l    (a0)+,d2
  453.     move.l    (a0)+,d1
  454.     move.l    (a0)+,d3
  455.     move.l    d7,(a3)+
  456.  
  457.     move.l    #$0f0f0f0f,d6        ; Merge 4x1, part 1
  458.     and.l    d6,d0
  459.     and.l    d6,d1
  460.     and.l    d6,d2
  461.     and.l    d6,d3
  462.     lsl.l    #4,d0
  463.     lsl.l    #4,d1
  464.     or.l    d2,d0
  465.     or.l    d3,d1
  466.  
  467.     move.l    (a0)+,d2
  468.     move.l    (a0)+,d6
  469.     move.l    (a0)+,d3
  470.     move.l    (a0)+,d7
  471.     move.l    d4,(a4)+
  472.  
  473.     move.l    #$0f0f0f0f,d4        ; Merge 4x1, part 2
  474.     and.l    d4,d2
  475.     and.l    d4,d6
  476.     and.l    d4,d3
  477.     and.l    d4,d7
  478.     lsl.l    #4,d2
  479.     lsl.l    #4,d3
  480.     or.l    d6,d2
  481.     or.l    d7,d3
  482.  
  483.     move.w    d2,d6            ; Swap 16x2
  484.     move.w    d3,d7
  485.     move.w    d0,d2
  486.     move.w    d1,d3
  487.     swap    d2
  488.     swap    d3
  489.     move.w    d2,d0
  490.     move.w    d3,d1
  491.     move.w    d6,d2
  492.     move.w    d7,d3
  493.  
  494.     move.l    #$33333333,d4
  495.     move.l    d2,d6            ; Swap 2x2
  496.     move.l    d3,d7
  497.     lsr.l    #2,d6
  498.     lsr.l    #2,d7
  499.     eor.l    d0,d6
  500.     eor.l    d1,d7
  501.     and.l    d4,d6
  502.     and.l    d4,d7
  503.     eor.l    d6,d0
  504.     eor.l    d7,d1
  505.     lsl.l    #2,d6
  506.     lsl.l    #2,d7
  507.     eor.l    d6,d2
  508.     eor.l    d7,d3
  509.  
  510.     move.l    #$00ff00ff,d4
  511.     move.l    d1,d6            ; Swap 8x1
  512.     move.l    d3,d7
  513.     lsr.l    #8,d6
  514.     lsr.l    #8,d7
  515.     eor.l    d0,d6
  516.     eor.l    d2,d7
  517. .2modx1start
  518.     and.l    d4,d6
  519.     and.l    d4,d7
  520.     eor.l    d6,d0
  521.     eor.l    d7,d2
  522.     lsl.l    #8,d6
  523.     lsl.l    #8,d7
  524.     eor.l    d6,d1
  525.     eor.l    d7,d3
  526.  
  527.     move.l    #$55555555,d4
  528.     move.l    d1,d5            ; Swap 1x1
  529.     move.l    d3,d7
  530.     lsr.l    #1,d5
  531.     lsr.l    #1,d7
  532.     eor.l    d0,d5
  533.     eor.l    d2,d7
  534.     and.l    d4,d5
  535.     and.l    d4,d7
  536.     eor.l    d5,d0
  537.     eor.l    d7,d2
  538.     add.l    d5,d5
  539.     add.l    d7,d7
  540.     eor.l    d1,d5
  541.     eor.l    d3,d7
  542.  
  543.     move.l    d0,a1
  544.     move.l    d2,d4
  545.  
  546.     cmpa.l    a0,a2
  547.     bne    .2modx1
  548.  
  549.     subq.w    #1,c2p_chunkyy
  550.     beq    .4exit
  551.  
  552.     add.l    c2p_srcmod(pc),a0
  553.  
  554.     move.l    (a0)+,d0
  555.     move.l    (a0)+,d2
  556.     move.l    (a0)+,d1
  557.     move.l    (a0)+,d3
  558.     move.l    d7,(a3)+
  559.  
  560.     move.l    #$0f0f0f0f,d6        ; Merge 4x1, part 1
  561.     and.l    d6,d0
  562.     and.l    d6,d1
  563.     and.l    d6,d2
  564.     and.l    d6,d3
  565.     lsl.l    #4,d0
  566.     lsl.l    #4,d1
  567.     or.l    d2,d0
  568.     or.l    d3,d1
  569.  
  570.     move.l    (a0)+,d2
  571.     move.l    (a0)+,d6
  572.     move.l    (a0)+,d3
  573.     move.l    (a0)+,d7
  574.     move.l    d4,(a4)+
  575.  
  576.     move.l    #$0f0f0f0f,d4        ; Merge 4x1, part 2
  577.     and.l    d4,d2
  578.     and.l    d4,d6
  579.     and.l    d4,d3
  580.     and.l    d4,d7
  581.     lsl.l    #4,d2
  582.     lsl.l    #4,d3
  583.     or.l    d6,d2
  584.     or.l    d7,d3
  585.  
  586.     move.w    d2,d6            ; Swap 16x2
  587.     move.w    d3,d7
  588.     move.w    d0,d2
  589.     move.w    d1,d3
  590.     swap    d2
  591.     swap    d3
  592.     move.w    d2,d0
  593.     move.w    d3,d1
  594.     move.w    d6,d2
  595.     move.w    d7,d3
  596.  
  597.     move.l    #$33333333,d4
  598.     move.l    d2,d6            ; Swap 2x2
  599.     move.l    d3,d7
  600.     lsr.l    #2,d6
  601.     lsr.l    #2,d7
  602.     eor.l    d0,d6
  603.     eor.l    d1,d7
  604.     and.l    d4,d6
  605.     and.l    d4,d7
  606.     eor.l    d6,d0
  607.     eor.l    d7,d1
  608.     lsl.l    #2,d6
  609.     lsl.l    #2,d7
  610.     eor.l    d6,d2
  611.     eor.l    d7,d3
  612.  
  613.     move.l    #$00ff00ff,d4
  614.     move.l    d1,d6            ; Swap 8x1
  615.     move.l    d3,d7
  616.     lsr.l    #8,d6
  617.     lsr.l    #8,d7
  618.     eor.l    d0,d6
  619.     eor.l    d2,d7
  620.  
  621.     and.l    d4,d6
  622.     and.l    d4,d7
  623.     eor.l    d6,d0
  624.     eor.l    d7,d2
  625.     lsl.l    #8,d6
  626.     lsl.l    #8,d7
  627.     eor.l    d6,d1
  628.     eor.l    d7,d3
  629.  
  630.     move.l    #$55555555,d4
  631.     move.l    d1,d5            ; Swap 1x1
  632.     move.l    d3,d7
  633.     lsr.l    #1,d5
  634.     lsr.l    #1,d7
  635.     eor.l    d0,d5
  636.     eor.l    d2,d7
  637.     and.l    d4,d5
  638.     and.l    d4,d7
  639.     eor.l    d5,d0
  640.     eor.l    d7,d2
  641.     add.l    d5,d5
  642.     add.l    d7,d7
  643.     eor.l    d1,d5
  644.     eor.l    d3,d7
  645.  
  646.     move.l    d0,a1
  647.     move.l    d2,d4
  648.  
  649.     bra    .2modx1y
  650.  
  651. .3start
  652.     movem.l    a0-a2/d1/d3,-(sp)
  653.  
  654.     movem.l    bm_Planes(a1),a3-a6    ; Setup ptrs to bpl0-3
  655.     add.l    d3,a3
  656.     add.l    d3,a4
  657.     add.l    d3,a5
  658.  
  659.     move.l    (a0)+,d0        ; Convert lower 4 bpls
  660.     move.l    (a0)+,d2
  661.     move.l    (a0)+,d1
  662.     move.l    (a0)+,d3
  663.  
  664.     move.l    #$0f0f0f0f,d6        ; Merge 4x1, part 1
  665.     and.l    d6,d0
  666.     and.l    d6,d1
  667.     and.l    d6,d2
  668.     and.l    d6,d3
  669.     lsl.l    #4,d0
  670.     lsl.l    #4,d1
  671.     or.l    d2,d0
  672.     or.l    d3,d1
  673.  
  674.     move.l    (a0)+,d2
  675.     move.l    (a0)+,d6
  676.     move.l    (a0)+,d3
  677.     move.l    (a0)+,d7
  678.  
  679.     move.l    #$0f0f0f0f,d4        ; Merge 4x1, part 2
  680.     and.l    d4,d2
  681.     and.l    d4,d6
  682.     and.l    d4,d3
  683.     and.l    d4,d7
  684.     lsl.l    #4,d2
  685.     lsl.l    #4,d3
  686.     or.l    d6,d2
  687.     or.l    d7,d3
  688.  
  689.     move.w    d2,d6            ; Swap 16x2
  690.     move.w    d3,d7
  691.     move.w    d0,d2
  692.     move.w    d1,d3
  693.     swap    d2
  694.     swap    d3
  695.     move.w    d2,d0
  696.     move.w    d3,d1
  697.     move.w    d6,d2
  698.     move.w    d7,d3
  699.  
  700.     move.l    #$33333333,d4
  701.     move.l    d2,d6            ; Swap 2x2
  702.     move.l    d3,d7
  703.     lsr.l    #2,d6
  704.     lsr.l    #2,d7
  705.     eor.l    d0,d6
  706.     eor.l    d1,d7
  707.     and.l    d4,d6
  708.     and.l    d4,d7
  709.     eor.l    d6,d0
  710.     eor.l    d7,d1
  711.     lsl.l    #2,d6
  712.     lsl.l    #2,d7
  713.     eor.l    d6,d2
  714.     eor.l    d7,d3
  715.  
  716.     move.l    #$00ff00ff,d4
  717.     move.l    d1,d6            ; Swap 8x1
  718.     move.l    d3,d7
  719.     lsr.l    #8,d6
  720.     lsr.l    #8,d7
  721.     eor.l    d0,d6
  722.     eor.l    d2,d7
  723.     bra    .3modx1start
  724. .3modx1y
  725.     add.l    c2p_srcbpr(pc),a2 ; Skip to end of next line
  726.     move.l    c2p_rowmod(pc),d0 ; Skip to beginning of next line
  727.     add.l    d0,a3
  728.     add.l    d0,a4
  729.     add.l    d0,a5
  730. .3modx1
  731.     move.l    (a0)+,d0
  732.     move.l    (a0)+,d2
  733.     move.l    (a0)+,d1
  734.     move.l    (a0)+,d3
  735.     move.l    d7,(a3)+
  736.  
  737.     move.l    #$0f0f0f0f,d6        ; Merge 4x1, part 1
  738.     and.l    d6,d0
  739.     and.l    d6,d1
  740.     and.l    d6,d2
  741.     and.l    d6,d3
  742.     lsl.l    #4,d0
  743.     lsl.l    #4,d1
  744.     or.l    d2,d0
  745.     or.l    d3,d1
  746.  
  747.     move.l    (a0)+,d2
  748.     move.l    (a0)+,d6
  749.     move.l    (a0)+,d3
  750.     move.l    (a0)+,d7
  751.     move.l    d4,(a4)+
  752.  
  753.     move.l    #$0f0f0f0f,d4        ; Merge 4x1, part 2
  754.     and.l    d4,d2
  755.     and.l    d4,d6
  756.     and.l    d4,d3
  757.     and.l    d4,d7
  758.     lsl.l    #4,d2
  759.     lsl.l    #4,d3
  760.     or.l    d6,d2
  761.     or.l    d7,d3
  762.  
  763.     move.w    d2,d6            ; Swap 16x2
  764.     move.w    d3,d7
  765.     move.w    d0,d2
  766.     move.w    d1,d3
  767.     swap    d2
  768.     swap    d3
  769.     move.w    d2,d0
  770.     move.w    d3,d1
  771.     move.w    d6,d2
  772.     move.w    d7,d3
  773.     move.l    d5,(a5)+
  774.  
  775.     move.l    #$33333333,d4
  776.     move.l    d2,d6            ; Swap 2x2
  777.     move.l    d3,d7
  778.     lsr.l    #2,d6
  779.     lsr.l    #2,d7
  780.     eor.l    d0,d6
  781.     eor.l    d1,d7
  782.     and.l    d4,d6
  783.     and.l    d4,d7
  784.     eor.l    d6,d0
  785.     eor.l    d7,d1
  786.     lsl.l    #2,d6
  787.     lsl.l    #2,d7
  788.     eor.l    d6,d2
  789.     eor.l    d7,d3
  790.  
  791.     move.l    #$00ff00ff,d4
  792.     move.l    d1,d6            ; Swap 8x1
  793.     move.l    d3,d7
  794.     lsr.l    #8,d6
  795.     lsr.l    #8,d7
  796.     eor.l    d0,d6
  797.     eor.l    d2,d7
  798. .3modx1start
  799.     and.l    d4,d6
  800.     and.l    d4,d7
  801.     eor.l    d6,d0
  802.     eor.l    d7,d2
  803.     lsl.l    #8,d6
  804.     lsl.l    #8,d7
  805.     eor.l    d6,d1
  806.     eor.l    d7,d3
  807.  
  808.     move.l    #$55555555,d4
  809.     move.l    d1,d5            ; Swap 1x1
  810.     move.l    d3,d7
  811.     lsr.l    #1,d5
  812.     lsr.l    #1,d7
  813.     eor.l    d0,d5
  814.     eor.l    d2,d7
  815.     and.l    d4,d5
  816.     and.l    d4,d7
  817.     eor.l    d5,d0
  818.     eor.l    d7,d2
  819.     add.l    d5,d5
  820.     add.l    d7,d7
  821.     eor.l    d1,d5
  822.     eor.l    d3,d7
  823.  
  824.     move.l    d0,a1
  825.     move.l    d2,d4
  826.  
  827.     cmpa.l    a0,a2
  828.     bne    .3modx1
  829.  
  830.     subq.w    #1,c2p_chunkyy
  831.     beq    .4exit
  832.  
  833.     add.l    c2p_srcmod(pc),a0
  834.  
  835.     move.l    (a0)+,d0
  836.     move.l    (a0)+,d2
  837.     move.l    (a0)+,d1
  838.     move.l    (a0)+,d3
  839.     move.l    d7,(a3)+
  840.  
  841.     move.l    #$0f0f0f0f,d6        ; Merge 4x1, part 1
  842.     and.l    d6,d0
  843.     and.l    d6,d1
  844.     and.l    d6,d2
  845.     and.l    d6,d3
  846.     lsl.l    #4,d0
  847.     lsl.l    #4,d1
  848.     or.l    d2,d0
  849.     or.l    d3,d1
  850.  
  851.     move.l    (a0)+,d2
  852.     move.l    (a0)+,d6
  853.     move.l    (a0)+,d3
  854.     move.l    (a0)+,d7
  855.     move.l    d4,(a4)+
  856.  
  857.     move.l    #$0f0f0f0f,d4        ; Merge 4x1, part 2
  858.     and.l    d4,d2
  859.     and.l    d4,d6
  860.     and.l    d4,d3
  861.     and.l    d4,d7
  862.     lsl.l    #4,d2
  863.     lsl.l    #4,d3
  864.     or.l    d6,d2
  865.     or.l    d7,d3
  866.  
  867.     move.w    d2,d6            ; Swap 16x2
  868.     move.w    d3,d7
  869.     move.w    d0,d2
  870.     move.w    d1,d3
  871.     swap    d2
  872.     swap    d3
  873.     move.w    d2,d0
  874.     move.w    d3,d1
  875.     move.w    d6,d2
  876.     move.w    d7,d3
  877.     move.l    d5,(a5)+
  878.  
  879.     move.l    #$33333333,d4
  880.     move.l    d2,d6            ; Swap 2x2
  881.     move.l    d3,d7
  882.     lsr.l    #2,d6
  883.     lsr.l    #2,d7
  884.     eor.l    d0,d6
  885.     eor.l    d1,d7
  886.     and.l    d4,d6
  887.     and.l    d4,d7
  888.     eor.l    d6,d0
  889.     eor.l    d7,d1
  890.     lsl.l    #2,d6
  891.     lsl.l    #2,d7
  892.     eor.l    d6,d2
  893.     eor.l    d7,d3
  894.  
  895.     move.l    #$00ff00ff,d4
  896.     move.l    d1,d6            ; Swap 8x1
  897.     move.l    d3,d7
  898.     lsr.l    #8,d6
  899.     lsr.l    #8,d7
  900.     eor.l    d0,d6
  901.     eor.l    d2,d7
  902.  
  903.     and.l    d4,d6
  904.     and.l    d4,d7
  905.     eor.l    d6,d0
  906.     eor.l    d7,d2
  907.     lsl.l    #8,d6
  908.     lsl.l    #8,d7
  909.     eor.l    d6,d1
  910.     eor.l    d7,d3
  911.  
  912.     move.l    #$55555555,d4
  913.     move.l    d1,d5            ; Swap 1x1
  914.     move.l    d3,d7
  915.     lsr.l    #1,d5
  916.     lsr.l    #1,d7
  917.     eor.l    d0,d5
  918.     eor.l    d2,d7
  919.     and.l    d4,d5
  920.     and.l    d4,d7
  921.     eor.l    d5,d0
  922.     eor.l    d7,d2
  923.     add.l    d5,d5
  924.     add.l    d7,d7
  925.     eor.l    d1,d5
  926.     eor.l    d3,d7
  927.  
  928.     move.l    d0,a1
  929.     move.l    d2,d4
  930.  
  931.     bra    .3modx1y
  932.  
  933. .4start
  934.     movem.l    a0-a2/d1/d3,-(sp)
  935.  
  936.     movem.l    bm_Planes(a1),a3-a6    ; Setup ptrs to bpl0-3
  937.     add.l    d3,a3
  938.     add.l    d3,a4
  939.     add.l    d3,a5
  940.     add.l    d3,a6
  941.  
  942.     move.l    (a0)+,d0        ; Convert lower 4 bpls
  943.     move.l    (a0)+,d2
  944.     move.l    (a0)+,d1
  945.     move.l    (a0)+,d3
  946.  
  947.     move.l    #$0f0f0f0f,d6        ; Merge 4x1, part 1
  948.     and.l    d6,d0
  949.     and.l    d6,d1
  950.     and.l    d6,d2
  951.     and.l    d6,d3
  952.     lsl.l    #4,d0
  953.     lsl.l    #4,d1
  954.     or.l    d2,d0
  955.     or.l    d3,d1
  956.  
  957.     move.l    (a0)+,d2
  958.     move.l    (a0)+,d6
  959.     move.l    (a0)+,d3
  960.     move.l    (a0)+,d7
  961.  
  962.     move.l    #$0f0f0f0f,d4        ; Merge 4x1, part 2
  963.     and.l    d4,d2
  964.     and.l    d4,d6
  965.     and.l    d4,d3
  966.     and.l    d4,d7
  967.     lsl.l    #4,d2
  968.     lsl.l    #4,d3
  969.     or.l    d6,d2
  970.     or.l    d7,d3
  971.  
  972.     move.w    d2,d6            ; Swap 16x2
  973.     move.w    d3,d7
  974.     move.w    d0,d2
  975.     move.w    d1,d3
  976.     swap    d2
  977.     swap    d3
  978.     move.w    d2,d0
  979.     move.w    d3,d1
  980.     move.w    d6,d2
  981.     move.w    d7,d3
  982.  
  983.     move.l    #$33333333,d4
  984.     move.l    d2,d6            ; Swap 2x2
  985.     move.l    d3,d7
  986.     lsr.l    #2,d6
  987.     lsr.l    #2,d7
  988.     eor.l    d0,d6
  989.     eor.l    d1,d7
  990.     and.l    d4,d6
  991.     and.l    d4,d7
  992.     eor.l    d6,d0
  993.     eor.l    d7,d1
  994.     lsl.l    #2,d6
  995.     lsl.l    #2,d7
  996.     eor.l    d6,d2
  997.     eor.l    d7,d3
  998.  
  999.     move.l    #$00ff00ff,d4
  1000.     move.l    d1,d6            ; Swap 8x1
  1001.     move.l    d3,d7
  1002.     lsr.l    #8,d6
  1003.     lsr.l    #8,d7
  1004.     eor.l    d0,d6
  1005.     eor.l    d2,d7
  1006.     bra    .4modx1start
  1007. .4modx1y
  1008.     add.l    c2p_srcbpr(pc),a2 ; Skip to end of next line
  1009.     move.l    c2p_rowmod(pc),d0 ; Skip to beginning of next line
  1010.     add.l    d0,a3
  1011.     add.l    d0,a4
  1012.     add.l    d0,a5
  1013.     add.l    d0,a6
  1014. .4modx1
  1015.     move.l    (a0)+,d0
  1016.     move.l    (a0)+,d2
  1017.     move.l    (a0)+,d1
  1018.     move.l    (a0)+,d3
  1019.     move.l    d7,(a3)+
  1020.  
  1021.     move.l    #$0f0f0f0f,d6        ; Merge 4x1, part 1
  1022.     and.l    d6,d0
  1023.     and.l    d6,d1
  1024.     and.l    d6,d2
  1025.     and.l    d6,d3
  1026.     lsl.l    #4,d0
  1027.     lsl.l    #4,d1
  1028.     or.l    d2,d0
  1029.     or.l    d3,d1
  1030.  
  1031.     move.l    (a0)+,d2
  1032.     move.l    (a0)+,d6
  1033.     move.l    (a0)+,d3
  1034.     move.l    (a0)+,d7
  1035.     move.l    d4,(a4)+
  1036.  
  1037.     move.l    #$0f0f0f0f,d4        ; Merge 4x1, part 2
  1038.     and.l    d4,d2
  1039.     and.l    d4,d6
  1040.     and.l    d4,d3
  1041.     and.l    d4,d7
  1042.     lsl.l    #4,d2
  1043.     lsl.l    #4,d3
  1044.     or.l    d6,d2
  1045.     or.l    d7,d3
  1046.  
  1047.     move.w    d2,d6            ; Swap 16x2
  1048.     move.w    d3,d7
  1049.     move.w    d0,d2
  1050.     move.w    d1,d3
  1051.     swap    d2
  1052.     swap    d3
  1053.     move.w    d2,d0
  1054.     move.w    d3,d1
  1055.     move.w    d6,d2
  1056.     move.w    d7,d3
  1057.     move.l    d5,(a5)+
  1058.  
  1059.     move.l    #$33333333,d4
  1060.     move.l    d2,d6            ; Swap 2x2
  1061.     move.l    d3,d7
  1062.     lsr.l    #2,d6
  1063.     lsr.l    #2,d7
  1064.     eor.l    d0,d6
  1065.     eor.l    d1,d7
  1066.     and.l    d4,d6
  1067.     and.l    d4,d7
  1068.     eor.l    d6,d0
  1069.     eor.l    d7,d1
  1070.     lsl.l    #2,d6
  1071.     lsl.l    #2,d7
  1072.     eor.l    d6,d2
  1073.     eor.l    d7,d3
  1074.  
  1075.     move.l    #$00ff00ff,d4
  1076.     move.l    d1,d6            ; Swap 8x1
  1077.     move.l    d3,d7
  1078.     lsr.l    #8,d6
  1079.     lsr.l    #8,d7
  1080.     eor.l    d0,d6
  1081.     eor.l    d2,d7
  1082.     move.l    a1,(a6)+
  1083. .4modx1start
  1084.     and.l    d4,d6
  1085.     and.l    d4,d7
  1086.     eor.l    d6,d0
  1087.     eor.l    d7,d2
  1088.     lsl.l    #8,d6
  1089.     lsl.l    #8,d7
  1090.     eor.l    d6,d1
  1091.     eor.l    d7,d3
  1092.  
  1093.     move.l    #$55555555,d4
  1094.     move.l    d1,d5            ; Swap 1x1
  1095.     move.l    d3,d7
  1096.     lsr.l    #1,d5
  1097.     lsr.l    #1,d7
  1098.     eor.l    d0,d5
  1099.     eor.l    d2,d7
  1100.     and.l    d4,d5
  1101.     and.l    d4,d7
  1102.     eor.l    d5,d0
  1103.     eor.l    d7,d2
  1104.     add.l    d5,d5
  1105.     add.l    d7,d7
  1106.     eor.l    d1,d5
  1107.     eor.l    d3,d7
  1108.  
  1109.     move.l    d0,a1
  1110.     move.l    d2,d4
  1111.  
  1112.     cmpa.l    a0,a2
  1113.     bne    .4modx1
  1114.  
  1115.     subq.w    #1,c2p_chunkyy
  1116.     beq    .4exit
  1117.  
  1118.     add.l    c2p_srcmod(pc),a0
  1119.  
  1120.     move.l    (a0)+,d0
  1121.     move.l    (a0)+,d2
  1122.     move.l    (a0)+,d1
  1123.     move.l    (a0)+,d3
  1124.     move.l    d7,(a3)+
  1125.  
  1126.     move.l    #$0f0f0f0f,d6        ; Merge 4x1, part 1
  1127.     and.l    d6,d0
  1128.     and.l    d6,d1
  1129.     and.l    d6,d2
  1130.     and.l    d6,d3
  1131.     lsl.l    #4,d0
  1132.     lsl.l    #4,d1
  1133.     or.l    d2,d0
  1134.     or.l    d3,d1
  1135.  
  1136.     move.l    (a0)+,d2
  1137.     move.l    (a0)+,d6
  1138.     move.l    (a0)+,d3
  1139.     move.l    (a0)+,d7
  1140.     move.l    d4,(a4)+
  1141.  
  1142.     move.l    #$0f0f0f0f,d4        ; Merge 4x1, part 2
  1143.     and.l    d4,d2
  1144.     and.l    d4,d6
  1145.     and.l    d4,d3
  1146.     and.l    d4,d7
  1147.     lsl.l    #4,d2
  1148.     lsl.l    #4,d3
  1149.     or.l    d6,d2
  1150.     or.l    d7,d3
  1151.  
  1152.     move.w    d2,d6            ; Swap 16x2
  1153.     move.w    d3,d7
  1154.     move.w    d0,d2
  1155.     move.w    d1,d3
  1156.     swap    d2
  1157.     swap    d3
  1158.     move.w    d2,d0
  1159.     move.w    d3,d1
  1160.     move.w    d6,d2
  1161.     move.w    d7,d3
  1162.     move.l    d5,(a5)+
  1163.  
  1164.     move.l    #$33333333,d4
  1165.     move.l    d2,d6            ; Swap 2x2
  1166.     move.l    d3,d7
  1167.     lsr.l    #2,d6
  1168.     lsr.l    #2,d7
  1169.     eor.l    d0,d6
  1170.     eor.l    d1,d7
  1171.     and.l    d4,d6
  1172.     and.l    d4,d7
  1173.     eor.l    d6,d0
  1174.     eor.l    d7,d1
  1175.     lsl.l    #2,d6
  1176.     lsl.l    #2,d7
  1177.     eor.l    d6,d2
  1178.     eor.l    d7,d3
  1179.  
  1180.     move.l    #$00ff00ff,d4
  1181.     move.l    d1,d6            ; Swap 8x1
  1182.     move.l    d3,d7
  1183.     lsr.l    #8,d6
  1184.     lsr.l    #8,d7
  1185.     eor.l    d0,d6
  1186.     eor.l    d2,d7
  1187.     move.l    a1,(a6)+
  1188.  
  1189.     and.l    d4,d6
  1190.     and.l    d4,d7
  1191.     eor.l    d6,d0
  1192.     eor.l    d7,d2
  1193.     lsl.l    #8,d6
  1194.     lsl.l    #8,d7
  1195.     eor.l    d6,d1
  1196.     eor.l    d7,d3
  1197.  
  1198.     move.l    #$55555555,d4
  1199.     move.l    d1,d5            ; Swap 1x1
  1200.     move.l    d3,d7
  1201.     lsr.l    #1,d5
  1202.     lsr.l    #1,d7
  1203.     eor.l    d0,d5
  1204.     eor.l    d2,d7
  1205.     and.l    d4,d5
  1206.     and.l    d4,d7
  1207.     eor.l    d5,d0
  1208.     eor.l    d7,d2
  1209.     add.l    d5,d5
  1210.     add.l    d7,d7
  1211.     eor.l    d1,d5
  1212.     eor.l    d3,d7
  1213.  
  1214.     move.l    d0,a1
  1215.     move.l    d2,d4
  1216.  
  1217.     bra    .4modx1y
  1218.  
  1219. .5start
  1220.     movem.l    a0-a2/d1/d3,-(sp)
  1221.  
  1222.     movem.l    bm_Planes(a1),a3-a6    ; Setup ptrs to bpl0-3
  1223.     add.l    d3,a3
  1224.     add.l    d3,a4
  1225.     add.l    d3,a5
  1226.     add.l    d3,a6
  1227.  
  1228.     move.l    (a0)+,d0        ; Convert lower 4 bpls
  1229.     move.l    (a0)+,d2
  1230.     move.l    (a0)+,d1
  1231.     move.l    (a0)+,d3
  1232.  
  1233.     move.l    #$0f0f0f0f,d6        ; Merge 4x1, part 1
  1234.     and.l    d6,d0
  1235.     and.l    d6,d1
  1236.     and.l    d6,d2
  1237.     and.l    d6,d3
  1238.     lsl.l    #4,d0
  1239.     lsl.l    #4,d1
  1240.     or.l    d2,d0
  1241.     or.l    d3,d1
  1242.  
  1243.     move.l    (a0)+,d2
  1244.     move.l    (a0)+,d6
  1245.     move.l    (a0)+,d3
  1246.     move.l    (a0)+,d7
  1247.  
  1248.     move.l    #$0f0f0f0f,d4        ; Merge 4x1, part 2
  1249.     and.l    d4,d2
  1250.     and.l    d4,d6
  1251.     and.l    d4,d3
  1252.     and.l    d4,d7
  1253.     lsl.l    #4,d2
  1254.     lsl.l    #4,d3
  1255.     or.l    d6,d2
  1256.     or.l    d7,d3
  1257.  
  1258.     move.w    d2,d6            ; Swap 16x2
  1259.     move.w    d3,d7
  1260.     move.w    d0,d2
  1261.     move.w    d1,d3
  1262.     swap    d2
  1263.     swap    d3
  1264.     move.w    d2,d0
  1265.     move.w    d3,d1
  1266.     move.w    d6,d2
  1267.     move.w    d7,d3
  1268.  
  1269.     move.l    #$33333333,d4
  1270.     move.l    d2,d6            ; Swap 2x2
  1271.     move.l    d3,d7
  1272.     lsr.l    #2,d6
  1273.     lsr.l    #2,d7
  1274.     eor.l    d0,d6
  1275.     eor.l    d1,d7
  1276.     and.l    d4,d6
  1277.     and.l    d4,d7
  1278.     eor.l    d6,d0
  1279.     eor.l    d7,d1
  1280.     lsl.l    #2,d6
  1281.     lsl.l    #2,d7
  1282.     eor.l    d6,d2
  1283.     eor.l    d7,d3
  1284.  
  1285.     move.l    #$00ff00ff,d4
  1286.     move.l    d1,d6            ; Swap 8x1
  1287.     move.l    d3,d7
  1288.     lsr.l    #8,d6
  1289.     lsr.l    #8,d7
  1290.     eor.l    d0,d6
  1291.     eor.l    d2,d7
  1292.     bra    .5modx1start
  1293. .5modx1y
  1294.     add.l    c2p_srcbpr(pc),a2 ; Skip to end of next line
  1295.     move.l    c2p_rowmod(pc),d0 ; Skip to beginning of next line
  1296.     add.l    d0,a3
  1297.     add.l    d0,a4
  1298.     add.l    d0,a5
  1299.     add.l    d0,a6
  1300. .5modx1
  1301.     move.l    (a0)+,d0
  1302.     move.l    (a0)+,d2
  1303.     move.l    (a0)+,d1
  1304.     move.l    (a0)+,d3
  1305.     move.l    d7,(a3)+
  1306.  
  1307.     move.l    #$0f0f0f0f,d6        ; Merge 4x1, part 1
  1308.     and.l    d6,d0
  1309.     and.l    d6,d1
  1310.     and.l    d6,d2
  1311.     and.l    d6,d3
  1312.     lsl.l    #4,d0
  1313.     lsl.l    #4,d1
  1314.     or.l    d2,d0
  1315.     or.l    d3,d1
  1316.  
  1317.     move.l    (a0)+,d2
  1318.     move.l    (a0)+,d6
  1319.     move.l    (a0)+,d3
  1320.     move.l    (a0)+,d7
  1321.     move.l    d4,(a4)+
  1322.  
  1323.     move.l    #$0f0f0f0f,d4        ; Merge 4x1, part 2
  1324.     and.l    d4,d2
  1325.     and.l    d4,d6
  1326.     and.l    d4,d3
  1327.     and.l    d4,d7
  1328.     lsl.l    #4,d2
  1329.     lsl.l    #4,d3
  1330.     or.l    d6,d2
  1331.     or.l    d7,d3
  1332.  
  1333.     move.w    d2,d6            ; Swap 16x2
  1334.     move.w    d3,d7
  1335.     move.w    d0,d2
  1336.     move.w    d1,d3
  1337.     swap    d2
  1338.     swap    d3
  1339.     move.w    d2,d0
  1340.     move.w    d3,d1
  1341.     move.w    d6,d2
  1342.     move.w    d7,d3
  1343.     move.l    d5,(a5)+
  1344.  
  1345.     move.l    #$33333333,d4
  1346.     move.l    d2,d6            ; Swap 2x2
  1347.     move.l    d3,d7
  1348.     lsr.l    #2,d6
  1349.     lsr.l    #2,d7
  1350.     eor.l    d0,d6
  1351.     eor.l    d1,d7
  1352.     and.l    d4,d6
  1353.     and.l    d4,d7
  1354.     eor.l    d6,d0
  1355.     eor.l    d7,d1
  1356.     lsl.l    #2,d6
  1357.     lsl.l    #2,d7
  1358.     eor.l    d6,d2
  1359.     eor.l    d7,d3
  1360.  
  1361.     move.l    #$00ff00ff,d4
  1362.     move.l    d1,d6            ; Swap 8x1
  1363.     move.l    d3,d7
  1364.     lsr.l    #8,d6
  1365.     lsr.l    #8,d7
  1366.     eor.l    d0,d6
  1367.     eor.l    d2,d7
  1368.     move.l    a1,(a6)+
  1369. .5modx1start
  1370.     and.l    d4,d6
  1371.     and.l    d4,d7
  1372.     eor.l    d6,d0
  1373.     eor.l    d7,d2
  1374.     lsl.l    #8,d6
  1375.     lsl.l    #8,d7
  1376.     eor.l    d6,d1
  1377.     eor.l    d7,d3
  1378.  
  1379.     move.l    #$55555555,d4
  1380.     move.l    d1,d5            ; Swap 1x1
  1381.     move.l    d3,d7
  1382.     lsr.l    #1,d5
  1383.     lsr.l    #1,d7
  1384.     eor.l    d0,d5
  1385.     eor.l    d2,d7
  1386.     and.l    d4,d5
  1387.     and.l    d4,d7
  1388.     eor.l    d5,d0
  1389.     eor.l    d7,d2
  1390.     add.l    d5,d5
  1391.     add.l    d7,d7
  1392.     eor.l    d1,d5
  1393.     eor.l    d3,d7
  1394.  
  1395.     move.l    d0,a1
  1396.     move.l    d2,d4
  1397.  
  1398.     cmpa.l    a0,a2
  1399.     bne    .5modx1
  1400.  
  1401.     subq.w    #1,c2p_chunkyy
  1402.     beq    .5modx2init
  1403.  
  1404.     add.l    c2p_srcmod(pc),a0
  1405.  
  1406.     move.l    (a0)+,d0
  1407.     move.l    (a0)+,d2
  1408.     move.l    (a0)+,d1
  1409.     move.l    (a0)+,d3
  1410.     move.l    d7,(a3)+
  1411.  
  1412.     move.l    #$0f0f0f0f,d6        ; Merge 4x1, part 1
  1413.     and.l    d6,d0
  1414.     and.l    d6,d1
  1415.     and.l    d6,d2
  1416.     and.l    d6,d3
  1417.     lsl.l    #4,d0
  1418.     lsl.l    #4,d1
  1419.     or.l    d2,d0
  1420.     or.l    d3,d1
  1421.  
  1422.     move.l    (a0)+,d2
  1423.     move.l    (a0)+,d6
  1424.     move.l    (a0)+,d3
  1425.     move.l    (a0)+,d7
  1426.     move.l    d4,(a4)+
  1427.  
  1428.     move.l    #$0f0f0f0f,d4        ; Merge 4x1, part 2
  1429.     and.l    d4,d2
  1430.     and.l    d4,d6
  1431.     and.l    d4,d3
  1432.     and.l    d4,d7
  1433.     lsl.l    #4,d2
  1434.     lsl.l    #4,d3
  1435.     or.l    d6,d2
  1436.     or.l    d7,d3
  1437.  
  1438.     move.w    d2,d6            ; Swap 16x2
  1439.     move.w    d3,d7
  1440.     move.w    d0,d2
  1441.     move.w    d1,d3
  1442.     swap    d2
  1443.     swap    d3
  1444.     move.w    d2,d0
  1445.     move.w    d3,d1
  1446.     move.w    d6,d2
  1447.     move.w    d7,d3
  1448.     move.l    d5,(a5)+
  1449.  
  1450.     move.l    #$33333333,d4
  1451.     move.l    d2,d6            ; Swap 2x2
  1452.     move.l    d3,d7
  1453.     lsr.l    #2,d6
  1454.     lsr.l    #2,d7
  1455.     eor.l    d0,d6
  1456.     eor.l    d1,d7
  1457.     and.l    d4,d6
  1458.     and.l    d4,d7
  1459.     eor.l    d6,d0
  1460.     eor.l    d7,d1
  1461.     lsl.l    #2,d6
  1462.     lsl.l    #2,d7
  1463.     eor.l    d6,d2
  1464.     eor.l    d7,d3
  1465.  
  1466.     move.l    #$00ff00ff,d4
  1467.     move.l    d1,d6            ; Swap 8x1
  1468.     move.l    d3,d7
  1469.     lsr.l    #8,d6
  1470.     lsr.l    #8,d7
  1471.     eor.l    d0,d6
  1472.     eor.l    d2,d7
  1473.     move.l    a1,(a6)+
  1474.  
  1475.     and.l    d4,d6
  1476.     and.l    d4,d7
  1477.     eor.l    d6,d0
  1478.     eor.l    d7,d2
  1479.     lsl.l    #8,d6
  1480.     lsl.l    #8,d7
  1481.     eor.l    d6,d1
  1482.     eor.l    d7,d3
  1483.  
  1484.     move.l    #$55555555,d4
  1485.     move.l    d1,d5            ; Swap 1x1
  1486.     move.l    d3,d7
  1487.     lsr.l    #1,d5
  1488.     lsr.l    #1,d7
  1489.     eor.l    d0,d5
  1490.     eor.l    d2,d7
  1491.     and.l    d4,d5
  1492.     and.l    d4,d7
  1493.     eor.l    d5,d0
  1494.     eor.l    d7,d2
  1495.     add.l    d5,d5
  1496.     add.l    d7,d7
  1497.     eor.l    d1,d5
  1498.     eor.l    d3,d7
  1499.  
  1500.     move.l    d0,a1
  1501.     move.l    d2,d4
  1502.  
  1503.     bra    .5modx1y
  1504.  
  1505. .5modx2init
  1506.     movem.l    (sp)+,a0-a2/d1/d3
  1507.  
  1508.     move.w    d1,c2p_chunkyy
  1509.  
  1510.     movem.l    bm_Planes+4*4(a1),a3-a6    ; Setup ptrs to bpl4-7
  1511.     add.l    d3,a3
  1512.  
  1513.     move.l    (a0)+,d0        ; Convert lower 4 bpls
  1514.     move.l    (a0)+,d2
  1515.     move.l    (a0)+,d1
  1516.     move.l    (a0)+,d3
  1517.  
  1518.     move.l    #$f0f0f0f0,d6        ; Merge 4x1, part 1
  1519.     and.l    d6,d0
  1520.     and.l    d6,d1
  1521.     and.l    d6,d2
  1522.     and.l    d6,d3
  1523.     lsr.l    #4,d2
  1524.     lsr.l    #4,d3
  1525.     or.l    d2,d0
  1526.     or.l    d3,d1
  1527.  
  1528.     move.l    (a0)+,d2
  1529.     move.l    (a0)+,d6
  1530.     move.l    (a0)+,d3
  1531.     move.l    (a0)+,d7
  1532.  
  1533.     move.l    #$f0f0f0f0,d4        ; Merge 4x1, part 2
  1534.     and.l    d4,d2
  1535.     and.l    d4,d6
  1536.     and.l    d4,d3
  1537.     and.l    d4,d7
  1538.     lsr.l    #4,d6
  1539.     lsr.l    #4,d7
  1540.     or.l    d6,d2
  1541.     or.l    d7,d3
  1542.  
  1543.     move.w    d2,d6            ; Swap 16x2
  1544.     move.w    d3,d7
  1545.     move.w    d0,d2
  1546.     move.w    d1,d3
  1547.     swap    d2
  1548.     swap    d3
  1549.     move.w    d2,d0
  1550.     move.w    d3,d1
  1551.     move.w    d6,d2
  1552.     move.w    d7,d3
  1553.  
  1554.     move.l    #$33333333,d4
  1555.     move.l    d2,d6            ; Swap 2x2
  1556.     move.l    d3,d7
  1557.     lsr.l    #2,d6
  1558.     lsr.l    #2,d7
  1559.     eor.l    d0,d6
  1560.     eor.l    d1,d7
  1561.     and.l    d4,d6
  1562.     and.l    d4,d7
  1563.     eor.l    d6,d0
  1564.     eor.l    d7,d1
  1565.     lsl.l    #2,d6
  1566.     lsl.l    #2,d7
  1567.     eor.l    d6,d2
  1568.     eor.l    d7,d3
  1569.  
  1570.     move.l    #$00ff00ff,d4
  1571.     move.l    d1,d6            ; Swap 8x1
  1572.     move.l    d3,d7
  1573.     lsr.l    #8,d6
  1574.     lsr.l    #8,d7
  1575.     eor.l    d0,d6
  1576.     eor.l    d2,d7
  1577.     bra    .5modx2start
  1578.  
  1579. .5modx2y
  1580.     add.l    c2p_srcbpr(pc),a2 ; Skip to end of next line
  1581.     move.l    c2p_rowmod(pc),d0 ; Skip to beginning of next line
  1582.     add.l    d0,a3
  1583. .5modx2
  1584.     move.l    (a0)+,d0
  1585.     move.l    (a0)+,d2
  1586.     move.l    (a0)+,d1
  1587.     move.l    (a0)+,d3
  1588.     move.l    d7,(a3)+
  1589.  
  1590.     move.l    #$f0f0f0f0,d6        ; Merge 4x1, part 1
  1591.     and.l    d6,d0
  1592.     and.l    d6,d1
  1593.     and.l    d6,d2
  1594.     and.l    d6,d3
  1595.     lsr.l    #4,d2
  1596.     lsr.l    #4,d3
  1597.     or.l    d2,d0
  1598.     or.l    d3,d1
  1599.  
  1600.     move.l    (a0)+,d2
  1601.     move.l    (a0)+,d6
  1602.     move.l    (a0)+,d3
  1603.     move.l    (a0)+,d7
  1604.  
  1605.     move.l    #$f0f0f0f0,d4        ; Merge 4x1, part 2
  1606.     and.l    d4,d2
  1607.     and.l    d4,d6
  1608.     and.l    d4,d3
  1609.     and.l    d4,d7
  1610.     lsr.l    #4,d6
  1611.     lsr.l    #4,d7
  1612.     or.l    d6,d2
  1613.     or.l    d7,d3
  1614.  
  1615.     move.w    d2,d6            ; Swap 16x2
  1616.     move.w    d3,d7
  1617.     move.w    d0,d2
  1618.     move.w    d1,d3
  1619.     swap    d2
  1620.     swap    d3
  1621.     move.w    d2,d0
  1622.     move.w    d3,d1
  1623.     move.w    d6,d2
  1624.     move.w    d7,d3
  1625.  
  1626.     move.l    #$33333333,d4
  1627.     move.l    d2,d6            ; Swap 2x2
  1628.     move.l    d3,d7
  1629.     lsr.l    #2,d6
  1630.     lsr.l    #2,d7
  1631.     eor.l    d0,d6
  1632.     eor.l    d1,d7
  1633.     and.l    d4,d6
  1634.     and.l    d4,d7
  1635.     eor.l    d6,d0
  1636.     eor.l    d7,d1
  1637.     lsl.l    #2,d6
  1638.     lsl.l    #2,d7
  1639.     eor.l    d6,d2
  1640.     eor.l    d7,d3
  1641.  
  1642.     move.l    #$00ff00ff,d4
  1643.     move.l    d1,d6            ; Swap 8x1
  1644.     move.l    d3,d7
  1645.     lsr.l    #8,d6
  1646.     lsr.l    #8,d7
  1647.     eor.l    d0,d6
  1648.     eor.l    d2,d7
  1649. .5modx2start
  1650.     and.l    d4,d6
  1651.     and.l    d4,d7
  1652.     eor.l    d6,d0
  1653.     eor.l    d7,d2
  1654.     lsl.l    #8,d6
  1655.     lsl.l    #8,d7
  1656.     eor.l    d6,d1
  1657.     eor.l    d7,d3
  1658.  
  1659.     move.l    #$55555555,d4
  1660.     move.l    d1,d5            ; Swap 1x1
  1661.     move.l    d3,d7
  1662.     lsr.l    #1,d5
  1663.     lsr.l    #1,d7
  1664.     eor.l    d0,d5
  1665.     eor.l    d2,d7
  1666.     and.l    d4,d5
  1667.     and.l    d4,d7
  1668.     eor.l    d5,d0
  1669.     eor.l    d7,d2
  1670.     add.l    d5,d5
  1671.     add.l    d7,d7
  1672.     eor.l    d1,d5
  1673.     eor.l    d3,d7
  1674.  
  1675.     move.l    d0,a1
  1676.     move.l    d2,d4
  1677.  
  1678.     cmpa.l    a0,a2
  1679.     bne    .5modx2
  1680.  
  1681.     subq.w    #1,c2p_chunkyy
  1682.     beq    .exit
  1683.  
  1684.     add.l    c2p_srcmod(pc),a0
  1685.  
  1686.     move.l    (a0)+,d0
  1687.     move.l    (a0)+,d2
  1688.     move.l    (a0)+,d1
  1689.     move.l    (a0)+,d3
  1690.     move.l    d7,(a3)+
  1691.  
  1692.     move.l    #$f0f0f0f0,d6        ; Merge 4x1, part 1
  1693.     and.l    d6,d0
  1694.     and.l    d6,d1
  1695.     and.l    d6,d2
  1696.     and.l    d6,d3
  1697.     lsr.l    #4,d2
  1698.     lsr.l    #4,d3
  1699.     or.l    d2,d0
  1700.     or.l    d3,d1
  1701.  
  1702.     move.l    (a0)+,d2
  1703.     move.l    (a0)+,d6
  1704.     move.l    (a0)+,d3
  1705.     move.l    (a0)+,d7
  1706.  
  1707.     move.l    #$f0f0f0f0,d4        ; Merge 4x1, part 2
  1708.     and.l    d4,d2
  1709.     and.l    d4,d6
  1710.     and.l    d4,d3
  1711.     and.l    d4,d7
  1712.     lsr.l    #4,d6
  1713.     lsr.l    #4,d7
  1714.     or.l    d6,d2
  1715.     or.l    d7,d3
  1716.  
  1717.     move.w    d2,d6            ; Swap 16x2
  1718.     move.w    d3,d7
  1719.     move.w    d0,d2
  1720.     move.w    d1,d3
  1721.     swap    d2
  1722.     swap    d3
  1723.     move.w    d2,d0
  1724.     move.w    d3,d1
  1725.     move.w    d6,d2
  1726.     move.w    d7,d3
  1727.  
  1728.     move.l    #$33333333,d4
  1729.     move.l    d2,d6            ; Swap 2x2
  1730.     move.l    d3,d7
  1731.     lsr.l    #2,d6
  1732.     lsr.l    #2,d7
  1733.     eor.l    d0,d6
  1734.     eor.l    d1,d7
  1735.     and.l    d4,d6
  1736.     and.l    d4,d7
  1737.     eor.l    d6,d0
  1738.     eor.l    d7,d1
  1739.     lsl.l    #2,d6
  1740.     lsl.l    #2,d7
  1741.     eor.l    d6,d2
  1742.     eor.l    d7,d3
  1743.  
  1744.     move.l    #$00ff00ff,d4
  1745.     move.l    d1,d6            ; Swap 8x1
  1746.     move.l    d3,d7
  1747.     lsr.l    #8,d6
  1748.     lsr.l    #8,d7
  1749.     eor.l    d0,d6
  1750.     eor.l    d2,d7
  1751.  
  1752.     and.l    d4,d6
  1753.     and.l    d4,d7
  1754.     eor.l    d6,d0
  1755.     eor.l    d7,d2
  1756.     lsl.l    #8,d6
  1757.     lsl.l    #8,d7
  1758.     eor.l    d6,d1
  1759.     eor.l    d7,d3
  1760.  
  1761.     move.l    #$55555555,d4
  1762.     move.l    d1,d5            ; Swap 1x1
  1763.     move.l    d3,d7
  1764.     lsr.l    #1,d5
  1765.     lsr.l    #1,d7
  1766.     eor.l    d0,d5
  1767.     eor.l    d2,d7
  1768.     and.l    d4,d5
  1769.     and.l    d4,d7
  1770.     eor.l    d5,d0
  1771.     eor.l    d7,d2
  1772.     add.l    d5,d5
  1773.     add.l    d7,d7
  1774.     eor.l    d1,d5
  1775.     eor.l    d3,d7
  1776.  
  1777.     move.l    d0,a1
  1778.     move.l    d2,d4
  1779.  
  1780.     bra    .5modx2y
  1781.  
  1782. .6start
  1783.     movem.l    a0-a2/d1/d3,-(sp)
  1784.  
  1785.     movem.l    bm_Planes(a1),a3-a6    ; Setup ptrs to bpl0-3
  1786.     add.l    d3,a3
  1787.     add.l    d3,a4
  1788.     add.l    d3,a5
  1789.     add.l    d3,a6
  1790.  
  1791.     move.l    (a0)+,d0        ; Convert lower 4 bpls
  1792.     move.l    (a0)+,d2
  1793.     move.l    (a0)+,d1
  1794.     move.l    (a0)+,d3
  1795.  
  1796.     move.l    #$0f0f0f0f,d6        ; Merge 4x1, part 1
  1797.     and.l    d6,d0
  1798.     and.l    d6,d1
  1799.     and.l    d6,d2
  1800.     and.l    d6,d3
  1801.     lsl.l    #4,d0
  1802.     lsl.l    #4,d1
  1803.     or.l    d2,d0
  1804.     or.l    d3,d1
  1805.  
  1806.     move.l    (a0)+,d2
  1807.     move.l    (a0)+,d6
  1808.     move.l    (a0)+,d3
  1809.     move.l    (a0)+,d7
  1810.  
  1811.     move.l    #$0f0f0f0f,d4        ; Merge 4x1, part 2
  1812.     and.l    d4,d2
  1813.     and.l    d4,d6
  1814.     and.l    d4,d3
  1815.     and.l    d4,d7
  1816.     lsl.l    #4,d2
  1817.     lsl.l    #4,d3
  1818.     or.l    d6,d2
  1819.     or.l    d7,d3
  1820.  
  1821.     move.w    d2,d6            ; Swap 16x2
  1822.     move.w    d3,d7
  1823.     move.w    d0,d2
  1824.     move.w    d1,d3
  1825.     swap    d2
  1826.     swap    d3
  1827.     move.w    d2,d0
  1828.     move.w    d3,d1
  1829.     move.w    d6,d2
  1830.     move.w    d7,d3
  1831.  
  1832.     move.l    #$33333333,d4
  1833.     move.l    d2,d6            ; Swap 2x2
  1834.     move.l    d3,d7
  1835.     lsr.l    #2,d6
  1836.     lsr.l    #2,d7
  1837.     eor.l    d0,d6
  1838.     eor.l    d1,d7
  1839.     and.l    d4,d6
  1840.     and.l    d4,d7
  1841.     eor.l    d6,d0
  1842.     eor.l    d7,d1
  1843.     lsl.l    #2,d6
  1844.     lsl.l    #2,d7
  1845.     eor.l    d6,d2
  1846.     eor.l    d7,d3
  1847.  
  1848.     move.l    #$00ff00ff,d4
  1849.     move.l    d1,d6            ; Swap 8x1
  1850.     move.l    d3,d7
  1851.     lsr.l    #8,d6
  1852.     lsr.l    #8,d7
  1853.     eor.l    d0,d6
  1854.     eor.l    d2,d7
  1855.     bra    .6modx1start
  1856. .6modx1y
  1857.     add.l    c2p_srcbpr(pc),a2 ; Skip to end of next line
  1858.     move.l    c2p_rowmod(pc),d0 ; Skip to beginning of next line
  1859.     add.l    d0,a3
  1860.     add.l    d0,a4
  1861.     add.l    d0,a5
  1862.     add.l    d0,a6
  1863. .6modx1
  1864.     move.l    (a0)+,d0
  1865.     move.l    (a0)+,d2
  1866.     move.l    (a0)+,d1
  1867.     move.l    (a0)+,d3
  1868.     move.l    d7,(a3)+
  1869.  
  1870.     move.l    #$0f0f0f0f,d6        ; Merge 4x1, part 1
  1871.     and.l    d6,d0
  1872.     and.l    d6,d1
  1873.     and.l    d6,d2
  1874.     and.l    d6,d3
  1875.     lsl.l    #4,d0
  1876.     lsl.l    #4,d1
  1877.     or.l    d2,d0
  1878.     or.l    d3,d1
  1879.  
  1880.     move.l    (a0)+,d2
  1881.     move.l    (a0)+,d6
  1882.     move.l    (a0)+,d3
  1883.     move.l    (a0)+,d7
  1884.     move.l    d4,(a4)+
  1885.  
  1886.     move.l    #$0f0f0f0f,d4        ; Merge 4x1, part 2
  1887.     and.l    d4,d2
  1888.     and.l    d4,d6
  1889.     and.l    d4,d3
  1890.     and.l    d4,d7
  1891.     lsl.l    #4,d2
  1892.     lsl.l    #4,d3
  1893.     or.l    d6,d2
  1894.     or.l    d7,d3
  1895.  
  1896.     move.w    d2,d6            ; Swap 16x2
  1897.     move.w    d3,d7
  1898.     move.w    d0,d2
  1899.     move.w    d1,d3
  1900.     swap    d2
  1901.     swap    d3
  1902.     move.w    d2,d0
  1903.     move.w    d3,d1
  1904.     move.w    d6,d2
  1905.     move.w    d7,d3
  1906.     move.l    d5,(a5)+
  1907.  
  1908.     move.l    #$33333333,d4
  1909.     move.l    d2,d6            ; Swap 2x2
  1910.     move.l    d3,d7
  1911.     lsr.l    #2,d6
  1912.     lsr.l    #2,d7
  1913.     eor.l    d0,d6
  1914.     eor.l    d1,d7
  1915.     and.l    d4,d6
  1916.     and.l    d4,d7
  1917.     eor.l    d6,d0
  1918.     eor.l    d7,d1
  1919.     lsl.l    #2,d6
  1920.     lsl.l    #2,d7
  1921.     eor.l    d6,d2
  1922.     eor.l    d7,d3
  1923.  
  1924.     move.l    #$00ff00ff,d4
  1925.     move.l    d1,d6            ; Swap 8x1
  1926.     move.l    d3,d7
  1927.     lsr.l    #8,d6
  1928.     lsr.l    #8,d7
  1929.     eor.l    d0,d6
  1930.     eor.l    d2,d7
  1931.     move.l    a1,(a6)+
  1932. .6modx1start
  1933.     and.l    d4,d6
  1934.     and.l    d4,d7
  1935.     eor.l    d6,d0
  1936.     eor.l    d7,d2
  1937.     lsl.l    #8,d6
  1938.     lsl.l    #8,d7
  1939.     eor.l    d6,d1
  1940.     eor.l    d7,d3
  1941.  
  1942.     move.l    #$55555555,d4
  1943.     move.l    d1,d5            ; Swap 1x1
  1944.     move.l    d3,d7
  1945.     lsr.l    #1,d5
  1946.     lsr.l    #1,d7
  1947.     eor.l    d0,d5
  1948.     eor.l    d2,d7
  1949.     and.l    d4,d5
  1950.     and.l    d4,d7
  1951.     eor.l    d5,d0
  1952.     eor.l    d7,d2
  1953.     add.l    d5,d5
  1954.     add.l    d7,d7
  1955.     eor.l    d1,d5
  1956.     eor.l    d3,d7
  1957.  
  1958.     move.l    d0,a1
  1959.     move.l    d2,d4
  1960.  
  1961.     cmpa.l    a0,a2
  1962.     bne    .6modx1
  1963.  
  1964.     subq.w    #1,c2p_chunkyy
  1965.     beq    .6modx2init
  1966.  
  1967.     add.l    c2p_srcmod(pc),a0
  1968.  
  1969.     move.l    (a0)+,d0
  1970.     move.l    (a0)+,d2
  1971.     move.l    (a0)+,d1
  1972.     move.l    (a0)+,d3
  1973.     move.l    d7,(a3)+
  1974.  
  1975.     move.l    #$0f0f0f0f,d6        ; Merge 4x1, part 1
  1976.     and.l    d6,d0
  1977.     and.l    d6,d1
  1978.     and.l    d6,d2
  1979.     and.l    d6,d3
  1980.     lsl.l    #4,d0
  1981.     lsl.l    #4,d1
  1982.     or.l    d2,d0
  1983.     or.l    d3,d1
  1984.  
  1985.     move.l    (a0)+,d2
  1986.     move.l    (a0)+,d6
  1987.     move.l    (a0)+,d3
  1988.     move.l    (a0)+,d7
  1989.     move.l    d4,(a4)+
  1990.  
  1991.     move.l    #$0f0f0f0f,d4        ; Merge 4x1, part 2
  1992.     and.l    d4,d2
  1993.     and.l    d4,d6
  1994.     and.l    d4,d3
  1995.     and.l    d4,d7
  1996.     lsl.l    #4,d2
  1997.     lsl.l    #4,d3
  1998.     or.l    d6,d2
  1999.     or.l    d7,d3
  2000.  
  2001.     move.w    d2,d6            ; Swap 16x2
  2002.     move.w    d3,d7
  2003.     move.w    d0,d2
  2004.     move.w    d1,d3
  2005.     swap    d2
  2006.     swap    d3
  2007.     move.w    d2,d0
  2008.     move.w    d3,d1
  2009.     move.w    d6,d2
  2010.     move.w    d7,d3
  2011.     move.l    d5,(a5)+
  2012.  
  2013.     move.l    #$33333333,d4
  2014.     move.l    d2,d6            ; Swap 2x2
  2015.     move.l    d3,d7
  2016.     lsr.l    #2,d6
  2017.     lsr.l    #2,d7
  2018.     eor.l    d0,d6
  2019.     eor.l    d1,d7
  2020.     and.l    d4,d6
  2021.     and.l    d4,d7
  2022.     eor.l    d6,d0
  2023.     eor.l    d7,d1
  2024.     lsl.l    #2,d6
  2025.     lsl.l    #2,d7
  2026.     eor.l    d6,d2
  2027.     eor.l    d7,d3
  2028.  
  2029.     move.l    #$00ff00ff,d4
  2030.     move.l    d1,d6            ; Swap 8x1
  2031.     move.l    d3,d7
  2032.     lsr.l    #8,d6
  2033.     lsr.l    #8,d7
  2034.     eor.l    d0,d6
  2035.     eor.l    d2,d7
  2036.     move.l    a1,(a6)+
  2037.  
  2038.     and.l    d4,d6
  2039.     and.l    d4,d7
  2040.     eor.l    d6,d0
  2041.     eor.l    d7,d2
  2042.     lsl.l    #8,d6
  2043.     lsl.l    #8,d7
  2044.     eor.l    d6,d1
  2045.     eor.l    d7,d3
  2046.  
  2047.     move.l    #$55555555,d4
  2048.     move.l    d1,d5            ; Swap 1x1
  2049.     move.l    d3,d7
  2050.     lsr.l    #1,d5
  2051.     lsr.l    #1,d7
  2052.     eor.l    d0,d5
  2053.     eor.l    d2,d7
  2054.     and.l    d4,d5
  2055.     and.l    d4,d7
  2056.     eor.l    d5,d0
  2057.     eor.l    d7,d2
  2058.     add.l    d5,d5
  2059.     add.l    d7,d7
  2060.     eor.l    d1,d5
  2061.     eor.l    d3,d7
  2062.  
  2063.     move.l    d0,a1
  2064.     move.l    d2,d4
  2065.  
  2066.     bra    .6modx1y
  2067.  
  2068. .6modx2init
  2069.     movem.l    (sp)+,a0-a2/d1/d3
  2070.  
  2071.     move.w    d1,c2p_chunkyy
  2072.  
  2073.     movem.l    bm_Planes+4*4(a1),a3-a6    ; Setup ptrs to bpl4-7
  2074.     add.l    d3,a3
  2075.     add.l    d3,a4
  2076.  
  2077.     move.l    (a0)+,d0        ; Convert lower 4 bpls
  2078.     move.l    (a0)+,d2
  2079.     move.l    (a0)+,d1
  2080.     move.l    (a0)+,d3
  2081.  
  2082.     move.l    #$f0f0f0f0,d6        ; Merge 4x1, part 1
  2083.     and.l    d6,d0
  2084.     and.l    d6,d1
  2085.     and.l    d6,d2
  2086.     and.l    d6,d3
  2087.     lsr.l    #4,d2
  2088.     lsr.l    #4,d3
  2089.     or.l    d2,d0
  2090.     or.l    d3,d1
  2091.  
  2092.     move.l    (a0)+,d2
  2093.     move.l    (a0)+,d6
  2094.     move.l    (a0)+,d3
  2095.     move.l    (a0)+,d7
  2096.  
  2097.     move.l    #$f0f0f0f0,d4        ; Merge 4x1, part 2
  2098.     and.l    d4,d2
  2099.     and.l    d4,d6
  2100.     and.l    d4,d3
  2101.     and.l    d4,d7
  2102.     lsr.l    #4,d6
  2103.     lsr.l    #4,d7
  2104.     or.l    d6,d2
  2105.     or.l    d7,d3
  2106.  
  2107.     move.w    d2,d6            ; Swap 16x2
  2108.     move.w    d3,d7
  2109.     move.w    d0,d2
  2110.     move.w    d1,d3
  2111.     swap    d2
  2112.     swap    d3
  2113.     move.w    d2,d0
  2114.     move.w    d3,d1
  2115.     move.w    d6,d2
  2116.     move.w    d7,d3
  2117.  
  2118.     move.l    #$33333333,d4
  2119.     move.l    d2,d6            ; Swap 2x2
  2120.     move.l    d3,d7
  2121.     lsr.l    #2,d6
  2122.     lsr.l    #2,d7
  2123.     eor.l    d0,d6
  2124.     eor.l    d1,d7
  2125.     and.l    d4,d6
  2126.     and.l    d4,d7
  2127.     eor.l    d6,d0
  2128.     eor.l    d7,d1
  2129.     lsl.l    #2,d6
  2130.     lsl.l    #2,d7
  2131.     eor.l    d6,d2
  2132.     eor.l    d7,d3
  2133.  
  2134.     move.l    #$00ff00ff,d4
  2135.     move.l    d1,d6            ; Swap 8x1
  2136.     move.l    d3,d7
  2137.     lsr.l    #8,d6
  2138.     lsr.l    #8,d7
  2139.     eor.l    d0,d6
  2140.     eor.l    d2,d7
  2141.     bra    .6modx2start
  2142.  
  2143. .6modx2y
  2144.     add.l    c2p_srcbpr(pc),a2 ; Skip to end of next line
  2145.     move.l    c2p_rowmod(pc),d0 ; Skip to beginning of next line
  2146.     add.l    d0,a3
  2147.     add.l    d0,a4
  2148. .6modx2
  2149.     move.l    (a0)+,d0
  2150.     move.l    (a0)+,d2
  2151.     move.l    (a0)+,d1
  2152.     move.l    (a0)+,d3
  2153.     move.l    d7,(a3)+
  2154.  
  2155.     move.l    #$f0f0f0f0,d6        ; Merge 4x1, part 1
  2156.     and.l    d6,d0
  2157.     and.l    d6,d1
  2158.     and.l    d6,d2
  2159.     and.l    d6,d3
  2160.     lsr.l    #4,d2
  2161.     lsr.l    #4,d3
  2162.     or.l    d2,d0
  2163.     or.l    d3,d1
  2164.  
  2165.     move.l    (a0)+,d2
  2166.     move.l    (a0)+,d6
  2167.     move.l    (a0)+,d3
  2168.     move.l    (a0)+,d7
  2169.     move.l    d4,(a4)+
  2170.  
  2171.     move.l    #$f0f0f0f0,d4        ; Merge 4x1, part 2
  2172.     and.l    d4,d2
  2173.     and.l    d4,d6
  2174.     and.l    d4,d3
  2175.     and.l    d4,d7
  2176.     lsr.l    #4,d6
  2177.     lsr.l    #4,d7
  2178.     or.l    d6,d2
  2179.     or.l    d7,d3
  2180.  
  2181.     move.w    d2,d6            ; Swap 16x2
  2182.     move.w    d3,d7
  2183.     move.w    d0,d2
  2184.     move.w    d1,d3
  2185.     swap    d2
  2186.     swap    d3
  2187.     move.w    d2,d0
  2188.     move.w    d3,d1
  2189.     move.w    d6,d2
  2190.     move.w    d7,d3
  2191.  
  2192.     move.l    #$33333333,d4
  2193.     move.l    d2,d6            ; Swap 2x2
  2194.     move.l    d3,d7
  2195.     lsr.l    #2,d6
  2196.     lsr.l    #2,d7
  2197.     eor.l    d0,d6
  2198.     eor.l    d1,d7
  2199.     and.l    d4,d6
  2200.     and.l    d4,d7
  2201.     eor.l    d6,d0
  2202.     eor.l    d7,d1
  2203.     lsl.l    #2,d6
  2204.     lsl.l    #2,d7
  2205.     eor.l    d6,d2
  2206.     eor.l    d7,d3
  2207.  
  2208.     move.l    #$00ff00ff,d4
  2209.     move.l    d1,d6            ; Swap 8x1
  2210.     move.l    d3,d7
  2211.     lsr.l    #8,d6
  2212.     lsr.l    #8,d7
  2213.     eor.l    d0,d6
  2214.     eor.l    d2,d7
  2215. .6modx2start
  2216.     and.l    d4,d6
  2217.     and.l    d4,d7
  2218.     eor.l    d6,d0
  2219.     eor.l    d7,d2
  2220.     lsl.l    #8,d6
  2221.     lsl.l    #8,d7
  2222.     eor.l    d6,d1
  2223.     eor.l    d7,d3
  2224.  
  2225.     move.l    #$55555555,d4
  2226.     move.l    d1,d5            ; Swap 1x1
  2227.     move.l    d3,d7
  2228.     lsr.l    #1,d5
  2229.     lsr.l    #1,d7
  2230.     eor.l    d0,d5
  2231.     eor.l    d2,d7
  2232.     and.l    d4,d5
  2233.     and.l    d4,d7
  2234.     eor.l    d5,d0
  2235.     eor.l    d7,d2
  2236.     add.l    d5,d5
  2237.     add.l    d7,d7
  2238.     eor.l    d1,d5
  2239.     eor.l    d3,d7
  2240.  
  2241.     move.l    d0,a1
  2242.     move.l    d2,d4
  2243.  
  2244.     cmpa.l    a0,a2
  2245.     bne    .6modx2
  2246.  
  2247.     subq.w    #1,c2p_chunkyy
  2248.     beq    .exit
  2249.  
  2250.     add.l    c2p_srcmod(pc),a0
  2251.  
  2252.     move.l    (a0)+,d0
  2253.     move.l    (a0)+,d2
  2254.     move.l    (a0)+,d1
  2255.     move.l    (a0)+,d3
  2256.     move.l    d7,(a3)+
  2257.  
  2258.     move.l    #$f0f0f0f0,d6        ; Merge 4x1, part 1
  2259.     and.l    d6,d0
  2260.     and.l    d6,d1
  2261.     and.l    d6,d2
  2262.     and.l    d6,d3
  2263.     lsr.l    #4,d2
  2264.     lsr.l    #4,d3
  2265.     or.l    d2,d0
  2266.     or.l    d3,d1
  2267.  
  2268.     move.l    (a0)+,d2
  2269.     move.l    (a0)+,d6
  2270.     move.l    (a0)+,d3
  2271.     move.l    (a0)+,d7
  2272.     move.l    d4,(a4)+
  2273.  
  2274.     move.l    #$f0f0f0f0,d4        ; Merge 4x1, part 2
  2275.     and.l    d4,d2
  2276.     and.l    d4,d6
  2277.     and.l    d4,d3
  2278.     and.l    d4,d7
  2279.     lsr.l    #4,d6
  2280.     lsr.l    #4,d7
  2281.     or.l    d6,d2
  2282.     or.l    d7,d3
  2283.  
  2284.     move.w    d2,d6            ; Swap 16x2
  2285.     move.w    d3,d7
  2286.     move.w    d0,d2
  2287.     move.w    d1,d3
  2288.     swap    d2
  2289.     swap    d3
  2290.     move.w    d2,d0
  2291.     move.w    d3,d1
  2292.     move.w    d6,d2
  2293.     move.w    d7,d3
  2294.  
  2295.     move.l    #$33333333,d4
  2296.     move.l    d2,d6            ; Swap 2x2
  2297.     move.l    d3,d7
  2298.     lsr.l    #2,d6
  2299.     lsr.l    #2,d7
  2300.     eor.l    d0,d6
  2301.     eor.l    d1,d7
  2302.     and.l    d4,d6
  2303.     and.l    d4,d7
  2304.     eor.l    d6,d0
  2305.     eor.l    d7,d1
  2306.     lsl.l    #2,d6
  2307.     lsl.l    #2,d7
  2308.     eor.l    d6,d2
  2309.     eor.l    d7,d3
  2310.  
  2311.     move.l    #$00ff00ff,d4
  2312.     move.l    d1,d6            ; Swap 8x1
  2313.     move.l    d3,d7
  2314.     lsr.l    #8,d6
  2315.     lsr.l    #8,d7
  2316.     eor.l    d0,d6
  2317.     eor.l    d2,d7
  2318.  
  2319.     and.l    d4,d6
  2320.     and.l    d4,d7
  2321.     eor.l    d6,d0
  2322.     eor.l    d7,d2
  2323.     lsl.l    #8,d6
  2324.     lsl.l    #8,d7
  2325.     eor.l    d6,d1
  2326.     eor.l    d7,d3
  2327.  
  2328.     move.l    #$55555555,d4
  2329.     move.l    d1,d5            ; Swap 1x1
  2330.     move.l    d3,d7
  2331.     lsr.l    #1,d5
  2332.     lsr.l    #1,d7
  2333.     eor.l    d0,d5
  2334.     eor.l    d2,d7
  2335.     and.l    d4,d5
  2336.     and.l    d4,d7
  2337.     eor.l    d5,d0
  2338.     eor.l    d7,d2
  2339.     add.l    d5,d5
  2340.     add.l    d7,d7
  2341.     eor.l    d1,d5
  2342.     eor.l    d3,d7
  2343.  
  2344.     move.l    d0,a1
  2345.     move.l    d2,d4
  2346.  
  2347.     bra    .6modx2y
  2348.  
  2349. .7start
  2350.     movem.l    a0-a2/d1/d3,-(sp)
  2351.  
  2352.     movem.l    bm_Planes(a1),a3-a6    ; Setup ptrs to bpl0-3
  2353.     add.l    d3,a3
  2354.     add.l    d3,a4
  2355.     add.l    d3,a5
  2356.     add.l    d3,a6
  2357.  
  2358.     move.l    (a0)+,d0        ; Convert lower 4 bpls
  2359.     move.l    (a0)+,d2
  2360.     move.l    (a0)+,d1
  2361.     move.l    (a0)+,d3
  2362.  
  2363.     move.l    #$0f0f0f0f,d6        ; Merge 4x1, part 1
  2364.     and.l    d6,d0
  2365.     and.l    d6,d1
  2366.     and.l    d6,d2
  2367.     and.l    d6,d3
  2368.     lsl.l    #4,d0
  2369.     lsl.l    #4,d1
  2370.     or.l    d2,d0
  2371.     or.l    d3,d1
  2372.  
  2373.     move.l    (a0)+,d2
  2374.     move.l    (a0)+,d6
  2375.     move.l    (a0)+,d3
  2376.     move.l    (a0)+,d7
  2377.  
  2378.     move.l    #$0f0f0f0f,d4        ; Merge 4x1, part 2
  2379.     and.l    d4,d2
  2380.     and.l    d4,d6
  2381.     and.l    d4,d3
  2382.     and.l    d4,d7
  2383.     lsl.l    #4,d2
  2384.     lsl.l    #4,d3
  2385.     or.l    d6,d2
  2386.     or.l    d7,d3
  2387.  
  2388.     move.w    d2,d6            ; Swap 16x2
  2389.     move.w    d3,d7
  2390.     move.w    d0,d2
  2391.     move.w    d1,d3
  2392.     swap    d2
  2393.     swap    d3
  2394.     move.w    d2,d0
  2395.     move.w    d3,d1
  2396.     move.w    d6,d2
  2397.     move.w    d7,d3
  2398.  
  2399.     move.l    #$33333333,d4
  2400.     move.l    d2,d6            ; Swap 2x2
  2401.     move.l    d3,d7
  2402.     lsr.l    #2,d6
  2403.     lsr.l    #2,d7
  2404.     eor.l    d0,d6
  2405.     eor.l    d1,d7
  2406.     and.l    d4,d6
  2407.     and.l    d4,d7
  2408.     eor.l    d6,d0
  2409.     eor.l    d7,d1
  2410.     lsl.l    #2,d6
  2411.     lsl.l    #2,d7
  2412.     eor.l    d6,d2
  2413.     eor.l    d7,d3
  2414.  
  2415.     move.l    #$00ff00ff,d4
  2416.     move.l    d1,d6            ; Swap 8x1
  2417.     move.l    d3,d7
  2418.     lsr.l    #8,d6
  2419.     lsr.l    #8,d7
  2420.     eor.l    d0,d6
  2421.     eor.l    d2,d7
  2422.     bra    .7modx1start
  2423. .7modx1y
  2424.     add.l    c2p_srcbpr(pc),a2     ; Skip to end of next line
  2425.     move.l    c2p_rowmod(pc),d0     ; Skip to beginning of next line
  2426.     add.l    d0,a3
  2427.     add.l    d0,a4
  2428.     add.l    d0,a5
  2429.     add.l    d0,a6
  2430. .7modx1
  2431.     move.l    (a0)+,d0
  2432.     move.l    (a0)+,d2
  2433.     move.l    (a0)+,d1
  2434.     move.l    (a0)+,d3
  2435.     move.l    d7,(a3)+
  2436.  
  2437.     move.l    #$0f0f0f0f,d6        ; Merge 4x1, part 1
  2438.     and.l    d6,d0
  2439.     and.l    d6,d1
  2440.     and.l    d6,d2
  2441.     and.l    d6,d3
  2442.     lsl.l    #4,d0
  2443.     lsl.l    #4,d1
  2444.     or.l    d2,d0
  2445.     or.l    d3,d1
  2446.  
  2447.     move.l    (a0)+,d2
  2448.     move.l    (a0)+,d6
  2449.     move.l    (a0)+,d3
  2450.     move.l    (a0)+,d7
  2451.     move.l    d4,(a4)+
  2452.  
  2453.     move.l    #$0f0f0f0f,d4        ; Merge 4x1, part 2
  2454.     and.l    d4,d2
  2455.     and.l    d4,d6
  2456.     and.l    d4,d3
  2457.     and.l    d4,d7
  2458.     lsl.l    #4,d2
  2459.     lsl.l    #4,d3
  2460.     or.l    d6,d2
  2461.     or.l    d7,d3
  2462.  
  2463.     move.w    d2,d6            ; Swap 16x2
  2464.     move.w    d3,d7
  2465.     move.w    d0,d2
  2466.     move.w    d1,d3
  2467.     swap    d2
  2468.     swap    d3
  2469.     move.w    d2,d0
  2470.     move.w    d3,d1
  2471.     move.w    d6,d2
  2472.     move.w    d7,d3
  2473.     move.l    d5,(a5)+
  2474.  
  2475.     move.l    #$33333333,d4
  2476.     move.l    d2,d6            ; Swap 2x2
  2477.     move.l    d3,d7
  2478.     lsr.l    #2,d6
  2479.     lsr.l    #2,d7
  2480.     eor.l    d0,d6
  2481.     eor.l    d1,d7
  2482.     and.l    d4,d6
  2483.     and.l    d4,d7
  2484.     eor.l    d6,d0
  2485.     eor.l    d7,d1
  2486.     lsl.l    #2,d6
  2487.     lsl.l    #2,d7
  2488.     eor.l    d6,d2
  2489.     eor.l    d7,d3
  2490.  
  2491.     move.l    #$00ff00ff,d4
  2492.     move.l    d1,d6            ; Swap 8x1
  2493.     move.l    d3,d7
  2494.     lsr.l    #8,d6
  2495.     lsr.l    #8,d7
  2496.     eor.l    d0,d6
  2497.     eor.l    d2,d7
  2498.     move.l    a1,(a6)+
  2499. .7modx1start
  2500.     and.l    d4,d6
  2501.     and.l    d4,d7
  2502.     eor.l    d6,d0
  2503.     eor.l    d7,d2
  2504.     lsl.l    #8,d6
  2505.     lsl.l    #8,d7
  2506.     eor.l    d6,d1
  2507.     eor.l    d7,d3
  2508.  
  2509.     move.l    #$55555555,d4
  2510.     move.l    d1,d5            ; Swap 1x1
  2511.     move.l    d3,d7
  2512.     lsr.l    #1,d5
  2513.     lsr.l    #1,d7
  2514.     eor.l    d0,d5
  2515.     eor.l    d2,d7
  2516.     and.l    d4,d5
  2517.     and.l    d4,d7
  2518.     eor.l    d5,d0
  2519.     eor.l    d7,d2
  2520.     add.l    d5,d5
  2521.     add.l    d7,d7
  2522.     eor.l    d1,d5
  2523.     eor.l    d3,d7
  2524.  
  2525.     move.l    d0,a1
  2526.     move.l    d2,d4
  2527.  
  2528.     cmpa.l    a0,a2
  2529.     bne    .7modx1
  2530.  
  2531.     subq.w    #1,c2p_chunkyy
  2532.     beq    .7modx2init
  2533.  
  2534.     add.l    c2p_srcmod(pc),a0
  2535.  
  2536.     move.l    (a0)+,d0
  2537.     move.l    (a0)+,d2
  2538.     move.l    (a0)+,d1
  2539.     move.l    (a0)+,d3
  2540.     move.l    d7,(a3)+
  2541.  
  2542.     move.l    #$0f0f0f0f,d6        ; Merge 4x1, part 1
  2543.     and.l    d6,d0
  2544.     and.l    d6,d1
  2545.     and.l    d6,d2
  2546.     and.l    d6,d3
  2547.     lsl.l    #4,d0
  2548.     lsl.l    #4,d1
  2549.     or.l    d2,d0
  2550.     or.l    d3,d1
  2551.  
  2552.     move.l    (a0)+,d2
  2553.     move.l    (a0)+,d6
  2554.     move.l    (a0)+,d3
  2555.     move.l    (a0)+,d7
  2556.     move.l    d4,(a4)+
  2557.  
  2558.     move.l    #$0f0f0f0f,d4        ; Merge 4x1, part 2
  2559.     and.l    d4,d2
  2560.     and.l    d4,d6
  2561.     and.l    d4,d3
  2562.     and.l    d4,d7
  2563.     lsl.l    #4,d2
  2564.     lsl.l    #4,d3
  2565.     or.l    d6,d2
  2566.     or.l    d7,d3
  2567.  
  2568.     move.w    d2,d6            ; Swap 16x2
  2569.     move.w    d3,d7
  2570.     move.w    d0,d2
  2571.     move.w    d1,d3
  2572.     swap    d2
  2573.     swap    d3
  2574.     move.w    d2,d0
  2575.     move.w    d3,d1
  2576.     move.w    d6,d2
  2577.     move.w    d7,d3
  2578.     move.l    d5,(a5)+
  2579.  
  2580.     move.l    #$33333333,d4
  2581.     move.l    d2,d6            ; Swap 2x2
  2582.     move.l    d3,d7
  2583.     lsr.l    #2,d6
  2584.     lsr.l    #2,d7
  2585.     eor.l    d0,d6
  2586.     eor.l    d1,d7
  2587.     and.l    d4,d6
  2588.     and.l    d4,d7
  2589.     eor.l    d6,d0
  2590.     eor.l    d7,d1
  2591.     lsl.l    #2,d6
  2592.     lsl.l    #2,d7
  2593.     eor.l    d6,d2
  2594.     eor.l    d7,d3
  2595.  
  2596.     move.l    #$00ff00ff,d4
  2597.     move.l    d1,d6            ; Swap 8x1
  2598.     move.l    d3,d7
  2599.     lsr.l    #8,d6
  2600.     lsr.l    #8,d7
  2601.     eor.l    d0,d6
  2602.     eor.l    d2,d7
  2603.     move.l    a1,(a6)+
  2604.  
  2605.     and.l    d4,d6
  2606.     and.l    d4,d7
  2607.     eor.l    d6,d0
  2608.     eor.l    d7,d2
  2609.     lsl.l    #8,d6
  2610.     lsl.l    #8,d7
  2611.     eor.l    d6,d1
  2612.     eor.l    d7,d3
  2613.  
  2614.     move.l    #$55555555,d4
  2615.     move.l    d1,d5            ; Swap 1x1
  2616.     move.l    d3,d7
  2617.     lsr.l    #1,d5
  2618.     lsr.l    #1,d7
  2619.     eor.l    d0,d5
  2620.     eor.l    d2,d7
  2621.     and.l    d4,d5
  2622.     and.l    d4,d7
  2623.     eor.l    d5,d0
  2624.     eor.l    d7,d2
  2625.     add.l    d5,d5
  2626.     add.l    d7,d7
  2627.     eor.l    d1,d5
  2628.     eor.l    d3,d7
  2629.  
  2630.     move.l    d0,a1
  2631.     move.l    d2,d4
  2632.  
  2633.     bra    .7modx1y
  2634.  
  2635. .7modx2init
  2636.     movem.l    (sp)+,a0-a2/d1/d3
  2637.  
  2638.     move.w    d1,c2p_chunkyy
  2639.  
  2640.     movem.l    bm_Planes+4*4(a1),a3-a6    ; Setup ptrs to bpl4-7
  2641.     add.l    d3,a3
  2642.     add.l    d3,a4
  2643.     add.l    d3,a5
  2644.     add.l    d3,a6
  2645.  
  2646.     move.l    (a0)+,d0        ; Convert lower 4 bpls
  2647.     move.l    (a0)+,d2
  2648.     move.l    (a0)+,d1
  2649.     move.l    (a0)+,d3
  2650.  
  2651.     move.l    #$f0f0f0f0,d6        ; Merge 4x1, part 1
  2652.     and.l    d6,d0
  2653.     and.l    d6,d1
  2654.     and.l    d6,d2
  2655.     and.l    d6,d3
  2656.     lsr.l    #4,d2
  2657.     lsr.l    #4,d3
  2658.     or.l    d2,d0
  2659.     or.l    d3,d1
  2660.  
  2661.     move.l    (a0)+,d2
  2662.     move.l    (a0)+,d6
  2663.     move.l    (a0)+,d3
  2664.     move.l    (a0)+,d7
  2665.  
  2666.     move.l    #$f0f0f0f0,d4        ; Merge 4x1, part 2
  2667.     and.l    d4,d2
  2668.     and.l    d4,d6
  2669.     and.l    d4,d3
  2670.     and.l    d4,d7
  2671.     lsr.l    #4,d6
  2672.     lsr.l    #4,d7
  2673.     or.l    d6,d2
  2674.     or.l    d7,d3
  2675.  
  2676.     move.w    d2,d6            ; Swap 16x2
  2677.     move.w    d3,d7
  2678.     move.w    d0,d2
  2679.     move.w    d1,d3
  2680.     swap    d2
  2681.     swap    d3
  2682.     move.w    d2,d0
  2683.     move.w    d3,d1
  2684.     move.w    d6,d2
  2685.     move.w    d7,d3
  2686.  
  2687.     move.l    #$33333333,d4
  2688.     move.l    d2,d6            ; Swap 2x2
  2689.     move.l    d3,d7
  2690.     lsr.l    #2,d6
  2691.     lsr.l    #2,d7
  2692.     eor.l    d0,d6
  2693.     eor.l    d1,d7
  2694.     and.l    d4,d6
  2695.     and.l    d4,d7
  2696.     eor.l    d6,d0
  2697.     eor.l    d7,d1
  2698.     lsl.l    #2,d6
  2699.     lsl.l    #2,d7
  2700.     eor.l    d6,d2
  2701.     eor.l    d7,d3
  2702.  
  2703.     move.l    #$00ff00ff,d4
  2704.     move.l    d1,d6            ; Swap 8x1
  2705.     move.l    d3,d7
  2706.     lsr.l    #8,d6
  2707.     lsr.l    #8,d7
  2708.     eor.l    d0,d6
  2709.     eor.l    d2,d7
  2710.     bra    .7modx2start
  2711.  
  2712. .7modx2y
  2713.     add.l    c2p_srcbpr(pc),a2     ; Skip to end of next line
  2714.     move.l    c2p_rowmod(pc),d0     ; Skip to beginning of next line
  2715.     add.l    d0,a3
  2716.     add.l    d0,a4
  2717.     add.l    d0,a5
  2718.     add.l    d0,a6
  2719. .7modx2
  2720.     move.l    (a0)+,d0
  2721.     move.l    (a0)+,d2
  2722.     move.l    (a0)+,d1
  2723.     move.l    (a0)+,d3
  2724.     move.l    d7,(a3)+
  2725.  
  2726.     move.l    #$f0f0f0f0,d6        ; Merge 4x1, part 1
  2727.     and.l    d6,d0
  2728.     and.l    d6,d1
  2729.     and.l    d6,d2
  2730.     and.l    d6,d3
  2731.     lsr.l    #4,d2
  2732.     lsr.l    #4,d3
  2733.     or.l    d2,d0
  2734.     or.l    d3,d1
  2735.  
  2736.     move.l    (a0)+,d2
  2737.     move.l    (a0)+,d6
  2738.     move.l    (a0)+,d3
  2739.     move.l    (a0)+,d7
  2740.     move.l    d4,(a4)+
  2741.  
  2742.     move.l    #$f0f0f0f0,d4        ; Merge 4x1, part 2
  2743.     and.l    d4,d2
  2744.     and.l    d4,d6
  2745.     and.l    d4,d3
  2746.     and.l    d4,d7
  2747.     lsr.l    #4,d6
  2748.     lsr.l    #4,d7
  2749.     or.l    d6,d2
  2750.     or.l    d7,d3
  2751.  
  2752.     move.w    d2,d6            ; Swap 16x2
  2753.     move.w    d3,d7
  2754.     move.w    d0,d2
  2755.     move.w    d1,d3
  2756.     swap    d2
  2757.     swap    d3
  2758.     move.w    d2,d0
  2759.     move.w    d3,d1
  2760.     move.w    d6,d2
  2761.     move.w    d7,d3
  2762.     move.l    d5,(a5)+
  2763.  
  2764.     move.l    #$33333333,d4
  2765.     move.l    d2,d6            ; Swap 2x2
  2766.     move.l    d3,d7
  2767.     lsr.l    #2,d6
  2768.     lsr.l    #2,d7
  2769.     eor.l    d0,d6
  2770.     eor.l    d1,d7
  2771.     and.l    d4,d6
  2772.     and.l    d4,d7
  2773.     eor.l    d6,d0
  2774.     eor.l    d7,d1
  2775.     lsl.l    #2,d6
  2776.     lsl.l    #2,d7
  2777.     eor.l    d6,d2
  2778.     eor.l    d7,d3
  2779.  
  2780.     move.l    #$00ff00ff,d4
  2781.     move.l    d1,d6            ; Swap 8x1
  2782.     move.l    d3,d7
  2783.     lsr.l    #8,d6
  2784.     lsr.l    #8,d7
  2785.     eor.l    d0,d6
  2786.     eor.l    d2,d7
  2787. .7modx2start
  2788.     and.l    d4,d6
  2789.     and.l    d4,d7
  2790.     eor.l    d6,d0
  2791.     eor.l    d7,d2
  2792.     lsl.l    #8,d6
  2793.     lsl.l    #8,d7
  2794.     eor.l    d6,d1
  2795.     eor.l    d7,d3
  2796.  
  2797.     move.l    #$55555555,d4
  2798.     move.l    d1,d5            ; Swap 1x1
  2799.     move.l    d3,d7
  2800.     lsr.l    #1,d5
  2801.     lsr.l    #1,d7
  2802.     eor.l    d0,d5
  2803.     eor.l    d2,d7
  2804.     and.l    d4,d5
  2805.     and.l    d4,d7
  2806.     eor.l    d5,d0
  2807.     eor.l    d7,d2
  2808.     add.l    d5,d5
  2809.     add.l    d7,d7
  2810.     eor.l    d1,d5
  2811.     eor.l    d3,d7
  2812.  
  2813.     move.l    d0,a1
  2814.     move.l    d2,d4
  2815.  
  2816.     cmpa.l    a0,a2
  2817.     bne    .7modx2
  2818.  
  2819.     subq.w    #1,c2p_chunkyy
  2820.     beq    .exit
  2821.  
  2822.     add.l    c2p_srcmod(pc),a0
  2823.  
  2824.     move.l    (a0)+,d0
  2825.     move.l    (a0)+,d2
  2826.     move.l    (a0)+,d1
  2827.     move.l    (a0)+,d3
  2828.     move.l    d7,(a3)+
  2829.  
  2830.     move.l    #$f0f0f0f0,d6        ; Merge 4x1, part 1
  2831.     and.l    d6,d0
  2832.     and.l    d6,d1
  2833.     and.l    d6,d2
  2834.     and.l    d6,d3
  2835.     lsr.l    #4,d2
  2836.     lsr.l    #4,d3
  2837.     or.l    d2,d0
  2838.     or.l    d3,d1
  2839.  
  2840.     move.l    (a0)+,d2
  2841.     move.l    (a0)+,d6
  2842.     move.l    (a0)+,d3
  2843.     move.l    (a0)+,d7
  2844.     move.l    d4,(a4)+
  2845.  
  2846.     move.l    #$f0f0f0f0,d4        ; Merge 4x1, part 2
  2847.     and.l    d4,d2
  2848.     and.l    d4,d6
  2849.     and.l    d4,d3
  2850.     and.l    d4,d7
  2851.     lsr.l    #4,d6
  2852.     lsr.l    #4,d7
  2853.     or.l    d6,d2
  2854.     or.l    d7,d3
  2855.  
  2856.     move.w    d2,d6            ; Swap 16x2
  2857.     move.w    d3,d7
  2858.     move.w    d0,d2
  2859.     move.w    d1,d3
  2860.     swap    d2
  2861.     swap    d3
  2862.     move.w    d2,d0
  2863.     move.w    d3,d1
  2864.     move.w    d6,d2
  2865.     move.w    d7,d3
  2866.     move.l    d5,(a5)+
  2867.  
  2868.     move.l    #$33333333,d4
  2869.     move.l    d2,d6            ; Swap 2x2
  2870.     move.l    d3,d7
  2871.     lsr.l    #2,d6
  2872.     lsr.l    #2,d7
  2873.     eor.l    d0,d6
  2874.     eor.l    d1,d7
  2875.     and.l    d4,d6
  2876.     and.l    d4,d7
  2877.     eor.l    d6,d0
  2878.     eor.l    d7,d1
  2879.     lsl.l    #2,d6
  2880.     lsl.l    #2,d7
  2881.     eor.l    d6,d2
  2882.     eor.l    d7,d3
  2883.  
  2884.     move.l    #$00ff00ff,d4
  2885.     move.l    d1,d6            ; Swap 8x1
  2886.     move.l    d3,d7
  2887.     lsr.l    #8,d6
  2888.     lsr.l    #8,d7
  2889.     eor.l    d0,d6
  2890.     eor.l    d2,d7
  2891.  
  2892.     and.l    d4,d6
  2893.     and.l    d4,d7
  2894.     eor.l    d6,d0
  2895.     eor.l    d7,d2
  2896.     lsl.l    #8,d6
  2897.     lsl.l    #8,d7
  2898.     eor.l    d6,d1
  2899.     eor.l    d7,d3
  2900.  
  2901.     move.l    #$55555555,d4
  2902.     move.l    d1,d5            ; Swap 1x1
  2903.     move.l    d3,d7
  2904.     lsr.l    #1,d5
  2905.     lsr.l    #1,d7
  2906.     eor.l    d0,d5
  2907.     eor.l    d2,d7
  2908.     and.l    d4,d5
  2909.     and.l    d4,d7
  2910.     eor.l    d5,d0
  2911.     eor.l    d7,d2
  2912.     add.l    d5,d5
  2913.     add.l    d7,d7
  2914.     eor.l    d1,d5
  2915.     eor.l    d3,d7
  2916.  
  2917.     move.l    d0,a1
  2918.     move.l    d2,d4
  2919.  
  2920.     bra    .7modx2y
  2921.  
  2922. .8start
  2923.     movem.l    a0-a2/d1/d3,-(sp)
  2924.  
  2925.     movem.l    bm_Planes(a1),a3-a6    ; Setup ptrs to bpl0-3
  2926.     add.l    d3,a3
  2927.     add.l    d3,a4
  2928.     add.l    d3,a5
  2929.     add.l    d3,a6
  2930.  
  2931.     move.l    (a0)+,d0        ; Convert lower 4 bpls
  2932.     move.l    (a0)+,d2
  2933.     move.l    (a0)+,d1
  2934.     move.l    (a0)+,d3
  2935.  
  2936.     move.l    #$0f0f0f0f,d6        ; Merge 4x1, part 1
  2937.     and.l    d6,d0
  2938.     and.l    d6,d1
  2939.     and.l    d6,d2
  2940.     and.l    d6,d3
  2941.     lsl.l    #4,d0
  2942.     lsl.l    #4,d1
  2943.     or.l    d2,d0
  2944.     or.l    d3,d1
  2945.  
  2946.     move.l    (a0)+,d2
  2947.     move.l    (a0)+,d6
  2948.     move.l    (a0)+,d3
  2949.     move.l    (a0)+,d7
  2950.  
  2951.     move.l    #$0f0f0f0f,d4        ; Merge 4x1, part 2
  2952.     and.l    d4,d2
  2953.     and.l    d4,d6
  2954.     and.l    d4,d3
  2955.     and.l    d4,d7
  2956.     lsl.l    #4,d2
  2957.     lsl.l    #4,d3
  2958.     or.l    d6,d2
  2959.     or.l    d7,d3
  2960.  
  2961.     move.w    d2,d6            ; Swap 16x2
  2962.     move.w    d3,d7
  2963.     move.w    d0,d2
  2964.     move.w    d1,d3
  2965.     swap    d2
  2966.     swap    d3
  2967.     move.w    d2,d0
  2968.     move.w    d3,d1
  2969.     move.w    d6,d2
  2970.     move.w    d7,d3
  2971.  
  2972.     move.l    #$33333333,d4
  2973.     move.l    d2,d6            ; Swap 2x2
  2974.     move.l    d3,d7
  2975.     lsr.l    #2,d6
  2976.     lsr.l    #2,d7
  2977.     eor.l    d0,d6
  2978.     eor.l    d1,d7
  2979.     and.l    d4,d6
  2980.     and.l    d4,d7
  2981.     eor.l    d6,d0
  2982.     eor.l    d7,d1
  2983.     lsl.l    #2,d6
  2984.     lsl.l    #2,d7
  2985.     eor.l    d6,d2
  2986.     eor.l    d7,d3
  2987.  
  2988.     move.l    #$00ff00ff,d4
  2989.     move.l    d1,d6            ; Swap 8x1
  2990.     move.l    d3,d7
  2991.     lsr.l    #8,d6
  2992.     lsr.l    #8,d7
  2993.     eor.l    d0,d6
  2994.     eor.l    d2,d7
  2995.     bra    .8modx1start
  2996. .8modx1y
  2997.     add.l    c2p_srcbpr(pc),a2 ; Skip to end of next line
  2998.     move.l    c2p_rowmod(pc),d0 ; Skip to beginning of next line
  2999.     add.l    d0,a3
  3000.     add.l    d0,a4
  3001.     add.l    d0,a5
  3002.     add.l    d0,a6
  3003. .8modx1
  3004.     move.l    (a0)+,d0
  3005.     move.l    (a0)+,d2
  3006.     move.l    (a0)+,d1
  3007.     move.l    (a0)+,d3
  3008.     move.l    d7,(a3)+
  3009.  
  3010.     move.l    #$0f0f0f0f,d6        ; Merge 4x1, part 1
  3011.     and.l    d6,d0
  3012.     and.l    d6,d1
  3013.     and.l    d6,d2
  3014.     and.l    d6,d3
  3015.     lsl.l    #4,d0
  3016.     lsl.l    #4,d1
  3017.     or.l    d2,d0
  3018.     or.l    d3,d1
  3019.  
  3020.     move.l    (a0)+,d2
  3021.     move.l    (a0)+,d6
  3022.     move.l    (a0)+,d3
  3023.     move.l    (a0)+,d7
  3024.     move.l    d4,(a4)+
  3025.  
  3026.     move.l    #$0f0f0f0f,d4        ; Merge 4x1, part 2
  3027.     and.l    d4,d2
  3028.     and.l    d4,d6
  3029.     and.l    d4,d3
  3030.     and.l    d4,d7
  3031.     lsl.l    #4,d2
  3032.     lsl.l    #4,d3
  3033.     or.l    d6,d2
  3034.     or.l    d7,d3
  3035.  
  3036.     move.w    d2,d6            ; Swap 16x2
  3037.     move.w    d3,d7
  3038.     move.w    d0,d2
  3039.     move.w    d1,d3
  3040.     swap    d2
  3041.     swap    d3
  3042.     move.w    d2,d0
  3043.     move.w    d3,d1
  3044.     move.w    d6,d2
  3045.     move.w    d7,d3
  3046.     move.l    d5,(a5)+
  3047.  
  3048.     move.l    #$33333333,d4
  3049.     move.l    d2,d6            ; Swap 2x2
  3050.     move.l    d3,d7
  3051.     lsr.l    #2,d6
  3052.     lsr.l    #2,d7
  3053.     eor.l    d0,d6
  3054.     eor.l    d1,d7
  3055.     and.l    d4,d6
  3056.     and.l    d4,d7
  3057.     eor.l    d6,d0
  3058.     eor.l    d7,d1
  3059.     lsl.l    #2,d6
  3060.     lsl.l    #2,d7
  3061.     eor.l    d6,d2
  3062.     eor.l    d7,d3
  3063.  
  3064.     move.l    #$00ff00ff,d4
  3065.     move.l    d1,d6            ; Swap 8x1
  3066.     move.l    d3,d7
  3067.     lsr.l    #8,d6
  3068.     lsr.l    #8,d7
  3069.     eor.l    d0,d6
  3070.     eor.l    d2,d7
  3071.     move.l    a1,(a6)+
  3072. .8modx1start
  3073.     and.l    d4,d6
  3074.     and.l    d4,d7
  3075.     eor.l    d6,d0
  3076.     eor.l    d7,d2
  3077.     lsl.l    #8,d6
  3078.     lsl.l    #8,d7
  3079.     eor.l    d6,d1
  3080.     eor.l    d7,d3
  3081.  
  3082.     move.l    #$55555555,d4
  3083.     move.l    d1,d5            ; Swap 1x1
  3084.     move.l    d3,d7
  3085.     lsr.l    #1,d5
  3086.     lsr.l    #1,d7
  3087.     eor.l    d0,d5
  3088.     eor.l    d2,d7
  3089.     and.l    d4,d5
  3090.     and.l    d4,d7
  3091.     eor.l    d5,d0
  3092.     eor.l    d7,d2
  3093.     add.l    d5,d5
  3094.     add.l    d7,d7
  3095.     eor.l    d1,d5
  3096.     eor.l    d3,d7
  3097.  
  3098.     move.l    d0,a1
  3099.     move.l    d2,d4
  3100.  
  3101.     cmpa.l    a0,a2
  3102.     bne    .8modx1
  3103.  
  3104.     subq.w    #1,c2p_chunkyy
  3105.     beq    .8modx2init
  3106.  
  3107.     add.l    c2p_srcmod(pc),a0
  3108.  
  3109.     move.l    (a0)+,d0
  3110.     move.l    (a0)+,d2
  3111.     move.l    (a0)+,d1
  3112.     move.l    (a0)+,d3
  3113.     move.l    d7,(a3)+
  3114.  
  3115.     move.l    #$0f0f0f0f,d6        ; Merge 4x1, part 1
  3116.     and.l    d6,d0
  3117.     and.l    d6,d1
  3118.     and.l    d6,d2
  3119.     and.l    d6,d3
  3120.     lsl.l    #4,d0
  3121.     lsl.l    #4,d1
  3122.     or.l    d2,d0
  3123.     or.l    d3,d1
  3124.  
  3125.     move.l    (a0)+,d2
  3126.     move.l    (a0)+,d6
  3127.     move.l    (a0)+,d3
  3128.     move.l    (a0)+,d7
  3129.     move.l    d4,(a4)+
  3130.  
  3131.     move.l    #$0f0f0f0f,d4        ; Merge 4x1, part 2
  3132.     and.l    d4,d2
  3133.     and.l    d4,d6
  3134.     and.l    d4,d3
  3135.     and.l    d4,d7
  3136.     lsl.l    #4,d2
  3137.     lsl.l    #4,d3
  3138.     or.l    d6,d2
  3139.     or.l    d7,d3
  3140.  
  3141.     move.w    d2,d6            ; Swap 16x2
  3142.     move.w    d3,d7
  3143.     move.w    d0,d2
  3144.     move.w    d1,d3
  3145.     swap    d2
  3146.     swap    d3
  3147.     move.w    d2,d0
  3148.     move.w    d3,d1
  3149.     move.w    d6,d2
  3150.     move.w    d7,d3
  3151.     move.l    d5,(a5)+
  3152.  
  3153.     move.l    #$33333333,d4
  3154.     move.l    d2,d6            ; Swap 2x2
  3155.     move.l    d3,d7
  3156.     lsr.l    #2,d6
  3157.     lsr.l    #2,d7
  3158.     eor.l    d0,d6
  3159.     eor.l    d1,d7
  3160.     and.l    d4,d6
  3161.     and.l    d4,d7
  3162.     eor.l    d6,d0
  3163.     eor.l    d7,d1
  3164.     lsl.l    #2,d6
  3165.     lsl.l    #2,d7
  3166.     eor.l    d6,d2
  3167.     eor.l    d7,d3
  3168.  
  3169.     move.l    #$00ff00ff,d4
  3170.     move.l    d1,d6            ; Swap 8x1
  3171.     move.l    d3,d7
  3172.     lsr.l    #8,d6
  3173.     lsr.l    #8,d7
  3174.     eor.l    d0,d6
  3175.     eor.l    d2,d7
  3176.     move.l    a1,(a6)+
  3177.  
  3178.     and.l    d4,d6
  3179.     and.l    d4,d7
  3180.     eor.l    d6,d0
  3181.     eor.l    d7,d2
  3182.     lsl.l    #8,d6
  3183.     lsl.l    #8,d7
  3184.     eor.l    d6,d1
  3185.     eor.l    d7,d3
  3186.  
  3187.     move.l    #$55555555,d4
  3188.     move.l    d1,d5            ; Swap 1x1
  3189.     move.l    d3,d7
  3190.     lsr.l    #1,d5
  3191.     lsr.l    #1,d7
  3192.     eor.l    d0,d5
  3193.     eor.l    d2,d7
  3194.     and.l    d4,d5
  3195.     and.l    d4,d7
  3196.     eor.l    d5,d0
  3197.     eor.l    d7,d2
  3198.     add.l    d5,d5
  3199.     add.l    d7,d7
  3200.     eor.l    d1,d5
  3201.     eor.l    d3,d7
  3202.  
  3203.     move.l    d0,a1
  3204.     move.l    d2,d4
  3205.  
  3206.     bra    .8modx1y
  3207.  
  3208. .8modx2init
  3209.     movem.l    (sp)+,a0-a2/d1/d3
  3210.  
  3211.     move.w    d1,c2p_chunkyy
  3212.  
  3213.     movem.l    bm_Planes+4*4(a1),a3-a6    ; Setup ptrs to bpl4-7
  3214.     add.l    d3,a3
  3215.     add.l    d3,a4
  3216.     add.l    d3,a5
  3217.     add.l    d3,a6
  3218.  
  3219.     move.l    (a0)+,d0        ; Convert lower 4 bpls
  3220.     move.l    (a0)+,d2
  3221.     move.l    (a0)+,d1
  3222.     move.l    (a0)+,d3
  3223.  
  3224.     move.l    #$f0f0f0f0,d6        ; Merge 4x1, part 1
  3225.     and.l    d6,d0
  3226.     and.l    d6,d1
  3227.     and.l    d6,d2
  3228.     and.l    d6,d3
  3229.     lsr.l    #4,d2
  3230.     lsr.l    #4,d3
  3231.     or.l    d2,d0
  3232.     or.l    d3,d1
  3233.  
  3234.     move.l    (a0)+,d2
  3235.     move.l    (a0)+,d6
  3236.     move.l    (a0)+,d3
  3237.     move.l    (a0)+,d7
  3238.  
  3239.     move.l    #$f0f0f0f0,d4        ; Merge 4x1, part 2
  3240.     and.l    d4,d2
  3241.     and.l    d4,d6
  3242.     and.l    d4,d3
  3243.     and.l    d4,d7
  3244.     lsr.l    #4,d6
  3245.     lsr.l    #4,d7
  3246.     or.l    d6,d2
  3247.     or.l    d7,d3
  3248.  
  3249.     move.w    d2,d6            ; Swap 16x2
  3250.     move.w    d3,d7
  3251.     move.w    d0,d2
  3252.     move.w    d1,d3
  3253.     swap    d2
  3254.     swap    d3
  3255.     move.w    d2,d0
  3256.     move.w    d3,d1
  3257.     move.w    d6,d2
  3258.     move.w    d7,d3
  3259.  
  3260.     move.l    #$33333333,d4
  3261.     move.l    d2,d6            ; Swap 2x2
  3262.     move.l    d3,d7
  3263.     lsr.l    #2,d6
  3264.     lsr.l    #2,d7
  3265.     eor.l    d0,d6
  3266.     eor.l    d1,d7
  3267.     and.l    d4,d6
  3268.     and.l    d4,d7
  3269.     eor.l    d6,d0
  3270.     eor.l    d7,d1
  3271.     lsl.l    #2,d6
  3272.     lsl.l    #2,d7
  3273.     eor.l    d6,d2
  3274.     eor.l    d7,d3
  3275.  
  3276.     move.l    #$00ff00ff,d4
  3277.     move.l    d1,d6            ; Swap 8x1
  3278.     move.l    d3,d7
  3279.     lsr.l    #8,d6
  3280.     lsr.l    #8,d7
  3281.     eor.l    d0,d6
  3282.     eor.l    d2,d7
  3283.     bra    .8modx2start
  3284.  
  3285. .8modx2y
  3286.     add.l    c2p_srcbpr(pc),a2 ; Skip to end of next line
  3287.     move.l    c2p_rowmod(pc),d0 ; Skip to beginning of next line
  3288.     add.l    d0,a3
  3289.     add.l    d0,a4
  3290.     add.l    d0,a5
  3291.     add.l    d0,a6
  3292. .8modx2
  3293.     move.l    (a0)+,d0
  3294.     move.l    (a0)+,d2
  3295.     move.l    (a0)+,d1
  3296.     move.l    (a0)+,d3
  3297.     move.l    d7,(a3)+
  3298.  
  3299.     move.l    #$f0f0f0f0,d6        ; Merge 4x1, part 1
  3300.     and.l    d6,d0
  3301.     and.l    d6,d1
  3302.     and.l    d6,d2
  3303.     and.l    d6,d3
  3304.     lsr.l    #4,d2
  3305.     lsr.l    #4,d3
  3306.     or.l    d2,d0
  3307.     or.l    d3,d1
  3308.  
  3309.     move.l    (a0)+,d2
  3310.     move.l    (a0)+,d6
  3311.     move.l    (a0)+,d3
  3312.     move.l    (a0)+,d7
  3313.     move.l    d4,(a4)+
  3314.  
  3315.     move.l    #$f0f0f0f0,d4        ; Merge 4x1, part 2
  3316.     and.l    d4,d2
  3317.     and.l    d4,d6
  3318.     and.l    d4,d3
  3319.     and.l    d4,d7
  3320.     lsr.l    #4,d6
  3321.     lsr.l    #4,d7
  3322.     or.l    d6,d2
  3323.     or.l    d7,d3
  3324.  
  3325.     move.w    d2,d6            ; Swap 16x2
  3326.     move.w    d3,d7
  3327.     move.w    d0,d2
  3328.     move.w    d1,d3
  3329.     swap    d2
  3330.     swap    d3
  3331.     move.w    d2,d0
  3332.     move.w    d3,d1
  3333.     move.w    d6,d2
  3334.     move.w    d7,d3
  3335.     move.l    d5,(a5)+
  3336.  
  3337.     move.l    #$33333333,d4
  3338.     move.l    d2,d6            ; Swap 2x2
  3339.     move.l    d3,d7
  3340.     lsr.l    #2,d6
  3341.     lsr.l    #2,d7
  3342.     eor.l    d0,d6
  3343.     eor.l    d1,d7
  3344.     and.l    d4,d6
  3345.     and.l    d4,d7
  3346.     eor.l    d6,d0
  3347.     eor.l    d7,d1
  3348.     lsl.l    #2,d6
  3349.     lsl.l    #2,d7
  3350.     eor.l    d6,d2
  3351.     eor.l    d7,d3
  3352.  
  3353.     move.l    #$00ff00ff,d4
  3354.     move.l    d1,d6            ; Swap 8x1
  3355.     move.l    d3,d7
  3356.     lsr.l    #8,d6
  3357.     lsr.l    #8,d7
  3358.     eor.l    d0,d6
  3359.     eor.l    d2,d7
  3360.     move.l    a1,(a6)+
  3361. .8modx2start
  3362.     and.l    d4,d6
  3363.     and.l    d4,d7
  3364.     eor.l    d6,d0
  3365.     eor.l    d7,d2
  3366.     lsl.l    #8,d6
  3367.     lsl.l    #8,d7
  3368.     eor.l    d6,d1
  3369.     eor.l    d7,d3
  3370.  
  3371.     move.l    #$55555555,d4
  3372.     move.l    d1,d5            ; Swap 1x1
  3373.     move.l    d3,d7
  3374.     lsr.l    #1,d5
  3375.     lsr.l    #1,d7
  3376.     eor.l    d0,d5
  3377.     eor.l    d2,d7
  3378.     and.l    d4,d5
  3379.     and.l    d4,d7
  3380.     eor.l    d5,d0
  3381.     eor.l    d7,d2
  3382.     add.l    d5,d5
  3383.     add.l    d7,d7
  3384.     eor.l    d1,d5
  3385.     eor.l    d3,d7
  3386.  
  3387.     move.l    d0,a1
  3388.     move.l    d2,d4
  3389.  
  3390.     cmpa.l    a0,a2
  3391.     bne    .8modx2
  3392.  
  3393.     subq.w    #1,c2p_chunkyy
  3394.     beq    .exit
  3395.  
  3396.     add.l    c2p_srcmod(pc),a0
  3397.  
  3398.     move.l    (a0)+,d0
  3399.     move.l    (a0)+,d2
  3400.     move.l    (a0)+,d1
  3401.     move.l    (a0)+,d3
  3402.     move.l    d7,(a3)+
  3403.  
  3404.     move.l    #$f0f0f0f0,d6        ; Merge 4x1, part 1
  3405.     and.l    d6,d0
  3406.     and.l    d6,d1
  3407.     and.l    d6,d2
  3408.     and.l    d6,d3
  3409.     lsr.l    #4,d2
  3410.     lsr.l    #4,d3
  3411.     or.l    d2,d0
  3412.     or.l    d3,d1
  3413.  
  3414.     move.l    (a0)+,d2
  3415.     move.l    (a0)+,d6
  3416.     move.l    (a0)+,d3
  3417.     move.l    (a0)+,d7
  3418.     move.l    d4,(a4)+
  3419.  
  3420.     move.l    #$f0f0f0f0,d4        ; Merge 4x1, part 2
  3421.     and.l    d4,d2
  3422.     and.l    d4,d6
  3423.     and.l    d4,d3
  3424.     and.l    d4,d7
  3425.     lsr.l    #4,d6
  3426.     lsr.l    #4,d7
  3427.     or.l    d6,d2
  3428.     or.l    d7,d3
  3429.  
  3430.     move.w    d2,d6            ; Swap 16x2
  3431.     move.w    d3,d7
  3432.     move.w    d0,d2
  3433.     move.w    d1,d3
  3434.     swap    d2
  3435.     swap    d3
  3436.     move.w    d2,d0
  3437.     move.w    d3,d1
  3438.     move.w    d6,d2
  3439.     move.w    d7,d3
  3440.     move.l    d5,(a5)+
  3441.  
  3442.     move.l    #$33333333,d4
  3443.     move.l    d2,d6            ; Swap 2x2
  3444.     move.l    d3,d7
  3445.     lsr.l    #2,d6
  3446.     lsr.l    #2,d7
  3447.     eor.l    d0,d6
  3448.     eor.l    d1,d7
  3449.     and.l    d4,d6
  3450.     and.l    d4,d7
  3451.     eor.l    d6,d0
  3452.     eor.l    d7,d1
  3453.     lsl.l    #2,d6
  3454.     lsl.l    #2,d7
  3455.     eor.l    d6,d2
  3456.     eor.l    d7,d3
  3457.  
  3458.     move.l    #$00ff00ff,d4
  3459.     move.l    d1,d6            ; Swap 8x1
  3460.     move.l    d3,d7
  3461.     lsr.l    #8,d6
  3462.     lsr.l    #8,d7
  3463.     eor.l    d0,d6
  3464.     eor.l    d2,d7
  3465.     move.l    a1,(a6)+
  3466.  
  3467.     and.l    d4,d6
  3468.     and.l    d4,d7
  3469.     eor.l    d6,d0
  3470.     eor.l    d7,d2
  3471.     lsl.l    #8,d6
  3472.     lsl.l    #8,d7
  3473.     eor.l    d6,d1
  3474.     eor.l    d7,d3
  3475.  
  3476.     move.l    #$55555555,d4
  3477.     move.l    d1,d5            ; Swap 1x1
  3478.     move.l    d3,d7
  3479.     lsr.l    #1,d5
  3480.     lsr.l    #1,d7
  3481.     eor.l    d0,d5
  3482.     eor.l    d2,d7
  3483.     and.l    d4,d5
  3484.     and.l    d4,d7
  3485.     eor.l    d5,d0
  3486.     eor.l    d7,d2
  3487.     add.l    d5,d5
  3488.     add.l    d7,d7
  3489.     eor.l    d1,d5
  3490.     eor.l    d3,d7
  3491.  
  3492.     move.l    d0,a1
  3493.     move.l    d2,d4
  3494.  
  3495.     bra    .8modx2y
  3496.  
  3497. .4exit:
  3498.     movem.l    (sp)+,a0-a2/d1/d3
  3499. .exit:
  3500.     movem.l    (sp)+,d2-d7/a2-a6
  3501. .earlyexit:
  3502.     rts
  3503.  
  3504. c2p_chunkyx    ds.w    1
  3505. c2p_chunkyy    ds.w    1
  3506. c2p_rowmod    ds.l    1
  3507. c2p_srcmod    ds.l    1
  3508. c2p_srcbpr    ds.l    1
  3509.